SQL Server: временные таблицы или объединения лучше?

Вообще говоря, для объединения большого количества данных это лучше для использования временной переменной таблицы/временного файла в качестве района сосредоточения войск, или я должен просто придерживаться "ОБЪЕДИНЕНИЯ ВСЕ"?

Предположения:

  • Никакая последующая обработка не необходима, результаты отправляются непосредственно клиенту.
  • Клиент ожидает полного recordset, так потоковая передача заканчивается, не необходимо.
10
задан Jonathan Allen 14 April 2010 в 07:33
поделиться

3 ответа

Я бы придерживался UNION ALL. Если нет необходимости выполнять промежуточную обработку, поэтому требуется временная таблица, я бы ее не использовал.

Вставка данных во временную таблицу (даже если это табличная переменная, которая, несмотря на мифы, не является чисто структурой «в памяти»), потребуется работа в базе данных tempdb (что может быть узким местом). Затем просто SELECT * as-is и возвращать его без какой-либо специальной обработки не нужно, и я думаю, что код раздувается. Когда вам просто нужно вернуть данные без какой-либо специальной обработки, тогда подход с временными таблицами кажется немного "универсальным". Если бы я думал, что есть причина для оправдания использования временной таблицы, я бы провел несколько тестов производительности для сравнения с vs без временных таблиц, а затем сравнил бы статистику (продолжительность, чтение, запись, ЦП). Проведение реальных тестов производительности - лучший способ быть максимально уверенным в том, что какой бы подход вы ни выбрали, он будет лучшим. Тем более, что вам не нужно использовать временные таблицы, чтобы работа была перенесена в tempdb, т.е. в зависимости от ваших запросов, это может в любом случае включать работу в tempdb.

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

9
ответ дан 3 December 2019 в 17:57
поделиться

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

7
ответ дан 3 December 2019 в 17:57
поделиться

Не относится к объединению всех ..

Использование временной таблицы может иметь преимущество по сравнению с точкой обзора параллелизма в зависимости от запроса, уровня изоляции и производительности клиентов / net, где использование временной таблицы может помочь минимизировать время блокировки чтения. Только не используйте SELECT ..INTO .. ​​для создания таблицы.

В общем случае UNION ALL позволяет избежать накладных расходов на ненужную рабочую таблицу.

2
ответ дан 3 December 2019 в 17:57
поделиться
Другие вопросы по тегам:

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