Как уменьшить количество выполнений в плане выполнения MS SQL - PullRequest
1 голос
/ 02 февраля 2010

Кто-нибудь знает, как уменьшить «Количество выполнений», которое можно увидеть в плане выполнения SQL-запросов в MS SQL Server?

У нас есть запрос, который работает медленно на одном рабочем сервере (другие в порядке). При проверке плана выполнения мы видим, что одним из первых шагов является сканирование кластерного индекса. На серверах, которые работают нормально, это сканирование выполняется один раз. На той, которая работает медленно, она выполняется 4 раза.

Мы читаем здесь (http://www.sql -server-performance.com / tips / query_execution_plan_analysis_p2.aspx ), что вы должны попытаться уменьшить его, но мы не можем найти никаких советов, как это сделать .

На обоих серверах установлены одинаковые версии Windows (2003) и SQL Server (2000).

Любая помощь будет оценена.

Ответы [ 2 ]

6 голосов
/ 02 февраля 2010

Действительно ли схема БД такая же? Если это так, попробуйте обновить статистику и дефрагментировать ваши индексы и таблицы.

http://msdn.microsoft.com/en-us/library/aa260645(SQL.80).aspx

http://technet.microsoft.com/en-us/library/cc966523.aspx

0 голосов
/ 02 февраля 2010

Извините, я отвечаю на это сам. Спасибо Артуру за ссылки, они были полезны (поэтому я проголосовал за твой ответ). Мы обновили статистику, но это не помогло. Мы проверили дефрагментацию с помощью DBCC SHOWCONTIG, но она не сильно отличалась от других баз данных.

Прошу прощения, что не опубликовал запрос AdaTheDev, но мне пришлось бы изменить все столбцы и прочее (потому что это довольно критично для бизнеса), и мы нашли решение сейчас.

Мы заметили, что в таблице было гораздо больше записей, чем в других базах данных. Мы добавили индексы на правильные столбцы. Мы сделали соединение как:

inner join table2 t2 on t1.t1Id = t2.t1Id and t2.someOtherId = @parameter
where t2.aThirdId = @otherParameter

Таким образом, мы добавили три отдельных индекса для каждого столбца Id, что ускорило его от 30 до 3-5 секунд (хотя у нас был индекс для t1Id и someOtherId вместе).

В конце мы также выполнили очистку таблицы, потому что многие записи были логически удалены и больше не нужны. Но индексы сделали свое дело.

...