Какая разница (с точки зрения системных ресурсов) между использованием представлений и временных таблиц? - PullRequest
1 голос
/ 10 сентября 2009

В чем разница (с точки зрения системных ресурсов) между использованием представлений и временных таблиц? У меня сложный отчет, который будет построен из многочисленных таблиц. Я пытаюсь определить, следует ли мне использовать серию представлений или временных таблиц (SQL 2008). Есть ли разница?

Ответы [ 3 ]

4 голосов
/ 10 сентября 2009

Представление - это просто псевдоним для запроса.

Временная таблица материализует набор результатов.

Представления, являющиеся просто псевдонимами, не требуют времени для заполнения, но они могут быть менее производительными при выборе из.

Заполнение временных таблиц (и усилий) занимает некоторое время, но может быть более эффективным.

Обратите внимание, что оптимизатор SQL Server может создавать временную таблицу во время выполнения из представления (которое вы увидите в статистике запросов и планируете как Worktable в tempdb), индексировать и заполнять его строками и даже добавить недостающие строки по требованию (эти операции называются Eager Spool и Lazy Spool)

Это делает перемотку представления намного более эффективной: вместо переоценки всего представления каждый раз, когда требуются его результаты, результаты сохраняются во временной таблице либо сразу (как в Eager Spool), либо постепенно (как в Lazy Spool).

SQL Server, однако, может материализовать представления путем создания на них кластеризованных индексов, хотя не все представления могут быть проиндексированы (чтобы быть индексируемым, представление должно соответствовать определенным условиям, описанным здесь ).

0 голосов
/ 11 сентября 2009

Скорее всего, индексированное представление будет работать для вас больше, чем вставка данных во временную таблицу / таблицы. кроме того, вместо использования ряда представлений лучше объединить их в одно представление. это намного проще в управлении и, скорее всего, улучшит производительность. Кроме того, правильные индексы в исходных таблицах также улучшат производительность.

0 голосов
/ 10 сентября 2009

Представление - это просто «фиксированный» оператор SELECT с именем. Если у вас сложный запрос, или в другом случае, если вы хотите показать только частичные данные из таблицы, вы используете представление. Представления существуют в базе данных, в которой вы их создали.

Временная таблица - это таблица, как и любая другая, но она сохраняется в базе данных tempdb и удаляется после завершения хранимой процедуры и т. Д. (Локальная таблица). Их можно увидеть только в области действия процедуры, в которой вы их используете. Существуют также глобальные временные таблицы, которые можно увидеть вне процедуры.

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