Как сократить время выполнения хранимой процедуры? - PullRequest
0 голосов
/ 20 мая 2019

У меня есть хранимая процедура (SQL Server 2008), которая выглядит следующим образом:

select...
union
select...
union
select...
union
select...
union
select...
union
select...
union
select...

Всего у меня есть 8 "выбрать" там. Обычно время выполнения ок. но иногда это занимает много времени. Я узнал, что после drop & create проблема исчезла. почему это происходит? и что я могу сделать, чтобы решить это? Спасибо!

1 Ответ

1 голос
/ 20 мая 2019

Это слишком долго для комментария.

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

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

Что вы можете с этим поделать? Посмотрите на план выполнения, который работает и добавьте подсказки запроса, чтобы запрос всегда использовал одни и те же алгоритмы. По моему опыту, это обычно включает исправление алгоритмов соединения.

Примечание: есть и другие возможности. Например, фрагментация таблиц и индексов в некоторых случаях может привести к значительным потерям производительности, и воссоздание таблиц может решить эти проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...