powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Почему не работает индекс
6 сообщений из 6, страница 1 из 1
Почему не работает индекс
    #32034262
alexr_r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уже два дня долбаюсь над проблемой, есть
выборка из 3-х таблиц, две из которых
содержат по несколько миллионов строк.
Результат должен содержать около сотни тысяч строк
Все вроде проиндексировано. Если в запросе указать
select top 10000 from ... то все Ok и индексы используются
как надо, если выбирать 40000 и больше, или просто
все то используется кусок индекса, а дальше начинаются
лупы, причем похоже без индекса.
Вот сам запрос
select m.ID as NTS_ID, c.ID as Carr_ID,
abs(m.Answered_Duration - c.Answered_Duration) as DurDelta
from (WCarriersDetail C WITH (INDEX (WCarriersDetail_IDX_Carr_ID_Time)) inner join
Shift_table S with(INDEX(Shift_table_IDX_Trunk_Dates))
on c.CArr_ID = 22 and c.Carr_ID = s.Trunk and
c.Call_date_time between s.FromDate and s.ToDate)
inner join WMasterCall M WITH (INDEX(WMasterCall_IDX_Time_Out_Trunk))
on m.out_trunk_group = 2203 and m.Carr_call_id = -1 and
m.call_date_time_k between (c.Call_date_time - s.ShiftMax) and (c.Call_date_time - s.ShiftMin)

where ((m.destination_number like c.destination_number + '%' and m.destination_number <> '') or
(c.destination_number like m.destination_number + '%' and c.destination_number <> ''))
order by c.call_date_time, c.ID

Мне нужно, чтоб выделенная часть, использовала индекс
WMasterCall_IDX_Time_Out_Trunk, который построен по
m.out_trunk_group, m.Carr_call_id, m.call_date_time_k
(Именно в таком порядке)
Причем, как я уже говорил, этот индекс используется, но только если поставить top 10000. В результате если делать выборку по 10000 - 20000 записей она получается
за разумное время, а выборка без top ... строится очень долго.
Как заставить оптимайзер использовать один и тот же план в обоих случаях?

Заранее спасибо за любые комментарии
...
Рейтинг: 0 / 0
Почему не работает индекс
    #32034287
Фотография boogier
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а если
Select top 100 percent
?
...
Рейтинг: 0 / 0
Почему не работает индекс
    #32034308
alexr_r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
При любом select top ... precent
Индексы вообще не используются
Кроме того, если брать select top 10 .... то индекс тоже
не используется.
Т.е. эта сволочь хочет использовать индекс
только на select top 10000 ...
...
Рейтинг: 0 / 0
Почему не работает индекс
    #32034321
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А статистика давно ли обновлялась ?
...
Рейтинг: 0 / 0
Почему не работает индекс
    #32034476
alexr_r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Статистику тоже обновлял (full scan), ничего не помогло.
Индекс используется только если делать left outer join с последней таблицей.
На этот select открывается курсор, и пришлось добавить проверку, что поля другой таблицы not null. После этого
все стало работать за разумное время.
Вот такая загадочная штука, этот оптимизатор.

По видимому, это связано с тем, что он считает, что данные равномерно, распределены по таблице, а в данном случае условие дает достаточно узкую выборку. Но вот как его затставить использовать нужный мне план, так и осталось неизвестным.
...
Рейтинг: 0 / 0
Почему не работает индекс
    #32034535
Фотография VVG_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно попробовать m.ID добавить в индекс. И еще - посмотри, какой тип join'а Execution Plan QA выдает. Если hash match - то дело скорее всего в этом.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Почему не работает индекс
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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