Избавление от буфера таблиц в плане выполнения SQL Server

StackOverflow https://stackoverflow.com/questions/1931100

Вопрос

У меня есть запрос, который создает несколько временных таблиц, а затем вставляет в них данные.Насколько я понимаю, это потенциальная причина возникновения Table Spool.Когда я смотрю на свой план выполнения, большая часть моей обработки тратится на буферизацию таблиц.Существуют ли хорошие методы решения подобных проблем с производительностью?Будет ли использование представления или CTE давать мне какие-либо преимущества по сравнению с временными таблицами?

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

Это было полезно?

Решение

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

Как насчет отображения запроса, схемы и мощности таблиц, а также плана.

Обновлять

Я, конечно, пойму, если вы не сможете показать нам запрос.Но действительно трудно догадаться, почему движок предпочитает намотку, не зная каких-либо особенностей.Я рекомендую вам просмотреть блог Крейга Фридмана, он является инженером в группе оптимизаторов запросов и объяснил многие внутренние принципы работы оптимизатора SQL 2005/2008.Вот несколько записей, которые я смог быстро найти, которые в той или иной форме затрагивают тему спулинга:

Команда поддержки клиентов SQL также ведет интересный блог по адресу http://blogs.msdn.com/psssql/
И в «sqltips» (блоге команды реляционного движка) есть несколько советов, например Операторы спулинга в плане запроса...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top