powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / помогите оптимизировать запрос
4 сообщений из 4, страница 1 из 1
помогите оптимизировать запрос
    #32016133
Harry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброе время суток. У меня возникла необходимость создать некую процедуру для тарификации телефонного трафика. Суть в следующем:
Есть таблица со статистикой - набираемыми номерами и номером звонящего(около 60000 записей). Кроме того есть три таблицы с кодами и зонами т.е код это префикс, зона - страна.
Причем объеденить их в одну таблицу нельзя.Коды могут быть разной длинны,
для поиска зоны звонка приходится через like копировать все подходящие записи из всех таблиц кодов во временную таблицу и выбирать из них код наибольшей длинны.
т.е есть номер 222468598666
в результате выборки кодов получим таблицу:
-----------
2
22
222
2224 -> нужный код
после этого удаляем таблицу и все сначала
и.т.д все работает но ужасно медленно. нельзя ли как нибуть оптимизировать данный алгоритм или может есть какое нибуть более оптимальное решение?
...
Рейтинг: 0 / 0
помогите оптимизировать запрос
    #32016134
x3_14
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно так:
SELECT @code = code
from code_list
WHERE @a_number LIKE code + '%'
AND DATALENGTH(code) = (SELECT MAX(DATALENGTH(code))
FROM code_list
WHERE @a_number LIKE code + '%')
Можно его же разделить на отдельные запросы, а если сразу таблицу надо получить, то лучше поэкспериментировать с group by
...
Рейтинг: 0 / 0
помогите оптимизировать запрос
    #32016135
x3_14
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А может еще так попробовать?
select LTRIM(MAX(RIGHT(' ' + item_code), 20))
from code_list
where item_code = LEFT(a_number, DATALENGTH(item_code))

здесь число пробелов и число (20) должны быть равны максимальной длине
или так

select ltrim(max(replicate(' ', 20 - DATALENGTH(item_code)) + item_code)
from code_list
where item_code = LEFT(a_number, DATALENGTH(item_code))

хотя на фоне невозможности использования индексов сравнивать, что быстрее right или replicate+ datalength имхо бессмыслено
...
Рейтинг: 0 / 0
помогите оптимизировать запрос
    #32016136
Harry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большое спасибо, обязательно попробую все три варианта - в любом случае это должно работать гораздо шустрее даже без индексов (в моем варианте индексы тоже не работали). Самое главное отпадает самый медленный момент - создание и удаление таблиц т.е. упроздняются файловые операции.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / помогите оптимизировать запрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]