#std777¶
Использование временных таблиц¶
1.¶
В общем случае временные таблицы рекомендуется использовать для повышения производительности и стабильности запросов.
Их можно применять и для других целей (например, для улучшения архитектуры кода), но это в некоторых сценариях может снижать производительность.
2.¶
Есть ситуации, когда временные таблицы не следует создавать или их создание нужно минимизировать.
2.1.¶
Не следует создавать временные таблицы с очень большим объемом данных (сотни тысяч записей). Это может приводить к существенному замедлению при записи и к исчерпанию свободного места на диске.
Если алгоритму нужен большой объем данных, обработку следует выполнять порциями.
2.2.¶
Максимально ограничивайте объем данных, выбираемых во временную таблицу: помещайте только то, что действительно нужно последующим запросам.
2.3.¶
Не помещайте во временную таблицу поля, которые не используются в следующих запросах: это лишние затраты времени и места.
2.4.¶
Не создавайте и не удаляйте временные таблицы в цикле, если можно создать одну таблицу до цикла.
2.5.¶
Не копируйте одну временную таблицу в другую только ради переименования. Вместо этого передавайте имя таблицы.
3.¶
Временные таблицы следует индексировать, когда это дает прирост производительности.
3.1.¶
Индекс следует строить в случаях:
3.1.1.¶
Большая временная таблица участвует в соединении (с любой стороны). В индекс включайте поля, используемые в условии ПО.
3.1.2.¶
Есть обращение к временной таблице в подзапросе конструкции логического оператора В (...).
В индекс включайте поля временной таблицы из списка выбора, соответствующие полям слева от В (...).
См. также: #std652: Несоответствие индексов и условий запроса.
3.2.¶
Маленькие временные таблицы (менее 1000 записей) индексировать не нужно.
3.3.¶
Если условий выборки/соединения с временной таблицей несколько, и часто проверяется только одно из них, индекс следует строить по наиболее часто проверяемому условию.
См. также¶
- #std656: Ограничения на использование вложенных запросов в условии соединения
- #std655: Ограничения на соединения с вложенными запросами и виртуальными таблицами