Какой имеют лучшую производительность: Полученные Таблицы или Временные таблицы

Иногда мы можем записать запрос и с полученной таблицей и с временной таблицей. мой вопрос - это, какой лучше? почему?

23
задан masoud ramezani 24 February 2010 в 13:47
поделиться

2 ответа

Производная таблица - это логическая конструкция.

Он может храниться в tempdb , создаваться во время выполнения путем переоценки основного оператора каждый раз, когда к нему обращаются, или даже вообще оптимизироваться.

Временная таблица - это физическая конструкция. Это таблица в tempdb , которая создается и заполняется значениями.

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

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

WITH    q (uuid) AS
        (
        SELECT  NEWID()
        )
SELECT  *
FROM    q
UNION ALL
SELECT  *
FROM    q

, скорее всего, даст два разных NEWID () .

В этом случае следует использовать временную таблицу, поскольку она гарантирует сохранение ее значений.

С другой стороны, этот запрос:

SELECT  *
FROM    (
        SELECT  *, ROW_NUMBER() OVER (ORDER BY id) AS rn
        FROM    master
        ) q
WHERE   rn BETWEEN 80 AND 100

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

21
ответ дан 29 November 2019 в 02:18
поделиться

Это зависит от обстоятельств.

Преимущества производных таблиц:

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

  2. Производная таблица "существует" только в плане выполнения запроса - это чисто логическая конструкция. На самом деле никакой таблицы не существует.

Преимущества временных таблиц

  1. Таблица "существует" - то есть она материализована в виде таблицы, по крайней мере в памяти, которая содержит набор результатов и может быть использована повторно.

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

10
ответ дан 29 November 2019 в 02:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: