Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Большой запрос не использует индексы?  [new]
Buster_iu
Member

Откуда: Иваново
Сообщений: 1
Здравствуйте.
Используется: Microsoft SQL Server Enterprise Edition (64-bit), 4 процессорный/16 ядерный сервер с внешним дисковым хранилищем.
Пока начну только с общего описания, ситуация следующая:
Имеется база для 1Cv8.1, 1С транслирует большой запрос, который в последствии выполняется на SQL сервере. В данном запросе идет объединение из трех больших таблиц (из двух таблиц, если смотреть со стороны 1С, остатки, которые делают объединение двух таблиц: итоги и текущие движения, это для тех кто знает) и нескольких мелких. В данных трех таблицах имеется 45млн. + 8млн. + 600т. записей. Все нужные индексы у данных таблиц имеются (по крайней мере я так думаю).
Происходит следующее: если все три таблицы объединяются в одном запросе, то SQL получает данные с дисков и начинает молотить процессором (растет CPU), да к тому же это всё выполняется только на одном ядре, параллелизация (не знаю должна ли в данной ситуации) не включается. Время выполнения запроса ~7 минут. А если я делаю выборку по одной таблице (из той в которой 600т. записей) и выношу во временную, а временную объединяю с двумя оставшимися, то общее время выполнения сокращается до 6 сек.
Общее время выполнения запроса экспоненциально, относительно того сколько из этой таблицы я выбираю записей, данное время приведено для 500 записей, если увеличить до 1000-2000 то время выполнения запроса может возрасти от получаса до нескольких часов.
То есть получается такая ситуация, что как будто бы при объединении всех трех таблиц перестают работать индексы.

Если у кого ни будь есть какие ни будь соображения, пожалуйста озвучьте.
Позднее постараюсь оформить и сам запрос, и структуру таблиц и индексов.
9 июл 12, 11:49    [12837747]     Ответить | Цитировать Сообщить модератору
 Re: Большой запрос не использует индексы?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Buster_iu
То есть получается такая ситуация, что как будто бы при объединении всех трех таблиц перестают работать индексы.

Наличие индекса не означает его автоматическое использование во всех запросах

Buster_iu
Если у кого ни будь есть какие ни будь соображения, пожалуйста озвучьте.

Изучать план выполнения запроса.
9 июл 12, 12:02    [12837872]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить