Временные таблицы наиболее полезны для сложного пакетного процесса, такого как отчет или задание ETL. Как правило, вы ожидаете использовать их довольно редко в транзакционном приложении.
Если вы выполняете сложный запрос с объединением, включающим несколько больших таблиц (возможно, для отчета), оптимизатор запросов может фактически не иметь возможности оптимизировать это за одно попадание, поэтому временные таблицы здесь выигрывают - они разлагают запрос в ряд более простых, которые дают оптимизатору запросов меньше возможностей испортить план. Иногда у вас есть операция, которая вообще не может быть выполнена в одном операторе SQL, поэтому для выполнения этой операции вообще необходимо выполнить несколько шагов. Опять же, здесь мы говорим о более сложных манипуляциях.
Вы также можете создать временную таблицу для промежуточного результата, а затем проиндексировать таблицу, возможно даже поместив в нее кластерный индекс для оптимизации последующего запроса. Это также может быть быстрым и грязным способом оптимизации запроса отчета в системе, в которой вам не разрешено добавлять индексы в схему базы данных. SELECT INTO полезен для этого типа операций, поскольку он минимально регистрируется (и, следовательно, быстро) и не требует выравнивания столбцов выбора и вставки.
Другие причины могут включать извлечение данных из полей XML с использованием CROSS APPLY и запросов xpath. Как правило, гораздо эффективнее извлечь это из временной таблицы, а затем работать с временной таблицей. Они также намного быстрее, чем CTE для некоторых задач, поскольку они материализуют результаты запроса, а не переоценивают запрос.
Следует отметить, что временные таблицы имеют ту же структуру, что и механизм запросов, используемый для хранения промежуточных результатов объединения, поэтому использование их не снижает производительность. Временные таблицы также допускают многофазные задачи с использованием операций над множествами и делают курсоры почти (не совсем, но почти) ненужными в коде T-SQL.
'Code Smell' - преувеличение, но если бы я увидел много простых операций с временными таблицами, мне было бы интересно узнать, что происходит.