Избавление от буфера таблиц в плане выполнения SQL Server
-
20-09-2019 - |
Вопрос
У меня есть запрос, который создает несколько временных таблиц, а затем вставляет в них данные.Насколько я понимаю, это потенциальная причина возникновения Table Spool.Когда я смотрю на свой план выполнения, большая часть моей обработки тратится на буферизацию таблиц.Существуют ли хорошие методы решения подобных проблем с производительностью?Будет ли использование представления или CTE давать мне какие-либо преимущества по сравнению с временными таблицами?
Я также заметил, что когда я навожу курсор мыши на каждую катушку таблицы, список вывода получается из одной и той же временной таблицы.
Решение
Ну, по той информации, которую вы предоставили, могу сказать только следующее:оптимизатор запросов выбрал наилучший возможный план.Он использует буферы таблиц для ускорения выполнения.Альтернативы, не использующие буферы таблиц, будут еще медленнее.
Как насчет отображения запроса, схемы и мощности таблиц, а также плана.
Обновлять
Я, конечно, пойму, если вы не сможете показать нам запрос.Но действительно трудно догадаться, почему движок предпочитает намотку, не зная каких-либо особенностей.Я рекомендую вам просмотреть блог Крейга Фридмана, он является инженером в группе оптимизаторов запросов и объяснил многие внутренние принципы работы оптимизатора SQL 2005/2008.Вот несколько записей, которые я смог быстро найти, которые в той или иной форме затрагивают тему спулинга:
Команда поддержки клиентов SQL также ведет интересный блог по адресу http://blogs.msdn.com/psssql/
И в «sqltips» (блоге команды реляционного движка) есть несколько советов, например Операторы спулинга в плане запроса...