CTE (общее табличное выражение) против временных таблиц или переменных таблицы, что быстрее?

CTE (общее табличное выражение) vs Temp tables или Table variables, что быстрее?

3 ответов


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

PS: мы написали более одного запроса с CTE в нем, прежде чем мы получили тот, который мы сейчас используем.


как я уже сказал в мой комментарий: ЭТО ЗАВИСИТ!

это действительно зависит от вашего запроса, ваших данных (сколько там? Какое оно??) и многое другое.

несколько пунктов пули, чтобы помнить, хотя:

  • CTE-это" встроенное представление", действительное только для следующего оператора; если возможно, SQL Server сохранит временный результат в памяти

  • таблицы Temp приходят в 2 флейворы: те видимые к вашему только подключение (create table #temp) или те, которые глобально видны всем соединениям (create table ##temp); оба будут автоматически удалены, когда соединение больше не использует их. Вы можете определить индексы во временных таблицах, и они являются частью транзакций

  • переменные таблицы не позволяют создавать индексы на них, и они не участвуют в транзакционном танце - это может быть pro или con - просто знайте об этом! А ROLLBACK не влияет на данные, содержащиеся в таблице переменная....


http://royalarun.blogspot.in/2013/10/difference-between-cte-and-temp-table.html

разница между CTE и Temp таблицы и переменной таблицы в SQL Server

  1. временные таблицы физически создаются в базе данных tempdb. Эти таблицы действуют как обычная таблица, а также могут иметь ограничения, индекс, как обычные таблицы. Он разделен на две локальные таблицы temp и глобальную таблицу Temp, Локальная временная таблица только доступно для сеанса SQL Server или подключения (означает одного пользователя), создавшего таблицы. Глобальные временные таблицы доступны для всех сеансов или подключений SQL Server (означает всех пользователей). Они могут быть созданы любым пользователем подключения SQL Server и автоматически удаляются после закрытия всех подключений SQL Server.случаи, когда требуется поддержка отката транзакций.

  2. CTE - Common table Expression-именованный временный результирующий набор, который используется для управления сложными подзапросами данных. Это существует для области действия оператора. Это создается в памяти, а не в базе данных Tempdb. Вы не можете создать индекс на CTE.

  3. переменная таблицы действует как переменная и существует для определенного пакета выполнения запроса. Он автоматически удаляется, как только он выходит из партии. Это также создается в базе данных Tempdb, но не в памяти.Невозможно создать некластеризованный индекс для табличной переменной, если только индекс побочный эффект первичного ключа или уникального ограничения для таблицы. Если результирующий набор мал, переменная таблицы всегда является оптимальным выбором.