Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
minva Member Откуда: г. Калуга Сообщений: 1209 |
Ниже два запроса При параметре 4556 летают оба, при параметре 4555 первый жутко тормозит. Планы одинаковые. В таблице single_ware_sells - 4.5 млн записей. Кластерный индекс по Ware_Code. Что мне нужно посмотреть, чтоб разобраться с ситуацией? я в этих вопросах слаб--Запрос 1 select top 1 A.AfsName, WS.orig_price, WS.self_price, Ws.quantity, WS.was_at from single_ware_sells WS inner join afs A on Ws.object_id = A.AfsId where WS.ware_code = 4556 (4555) order by WS.was_at desc --Запрос 2 select WS.orig_price, WS.self_price, Ws.quantity, WS.was_at from single_ware_sells WS where WS.ware_code = 4556 (4555) --Возвращает 309 (45) записей order by WS.was_at desc |
25 мар 15, 14:57 [17430371] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Как могут быть планы одинаковые у разных запросов ? Сканировать таблицу до первой нужной записи и сканировать всю таблицу в поисках всех нужных записей - это разные запросы |
||
25 мар 15, 15:00 [17430402] Ответить | Цитировать Сообщить модератору |
minva Member Откуда: г. Калуга Сообщений: 1209 |
Glory, планы одинаковые для одного запроса при разных параметрах |
25 мар 15, 15:02 [17430418] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47047 |
И индекса по was_at нет? |
25 мар 15, 15:02 [17430420] Ответить | Цитировать Сообщить модератору |
minva Member Откуда: г. Калуга Сообщений: 1209 |
iap, есть, по возрастанию |
25 мар 15, 15:03 [17430444] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Ага, везде наверое nested loops. Только в одном случае количество итераций - одна, а во втором - 4.5 млн |
||
25 мар 15, 15:04 [17430456] Ответить | Цитировать Сообщить модератору |
minva Member Откуда: г. Калуга Сообщений: 1209 |
Glory, все, нашел отличия в количестве выполнений выделенного пункта (Поиск ключа) скриншот плана https://yadi.sk/i/gZHL4wZ-fWLuh Тогда вопрос дальше - как-то улучшить это можно? |
25 мар 15, 15:13 [17430560] Ответить | Цитировать Сообщить модератору |
SomewhereSomehow Member Откуда: Moscow Сообщений: 2480 Блог |
minva, Чисто теоретически, паттерн похож на неравномерное распределение строк при row goal. Когда-то отвечал на похожий вопрос тут: 15826534 Посмотрите статейку: A query may take a long time to run if the query optimizer uses the Top operator in SQL Server 2008 R2 or in SQL Server 2012, если версия сервера подходящая, попробуйте добавить в конец проблемного запроса рекомендуемый в документации флаг option(querytraceon 4138) и посмотреть, изменится ли что-то, если запрос станет быстрее то дело в этом. Это только предположение, конечно. Для более точного ответа, нужно на действительный план смотреть. Можете приложить файлом в виде .sqlplan, если рекомендации из статьи не сработают. |
25 мар 15, 15:17 [17430583] Ответить | Цитировать Сообщить модератору |
SomewhereSomehow Member Откуда: Moscow Сообщений: 2480 Блог |
minva, А что касается поиска ключа, встаньте на этот оператор в плане, посмотрите его свойство Output Columns (и/или Predicate, если оно там будет) и добавьте столбцы, которые там перечислены в индекс IX_SingleWareS... (тот который у вас используется в этом плане запроса) - если даже это не уберет проблему, это ускорит запрос, т.к. не придется лазить в кластерный индекс, т.е. оператор Поиск Ключа, должен вообще исчезнуть из плана. |
25 мар 15, 15:26 [17430663] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |