Временные таблицы являются большим НЕТ в SQL Server.
- Они вызывают перекомпиляцию плана запроса, что является дорогостоящим.
- Создание и удаление таблицы также являются дорогостоящими операциями, которые вы добавляете в свой процесс.
- Если во временные данные поступает большой объем данных, ваши операции будут медленными из-за отсутствия индексов. Вы МОЖЕТЕ создать индексы для временных таблиц. Но я никогда не буду рекомендовать временную таблицу для чего-либо с большим количеством записей.
Ваш другой подход: создание и последующее удаление обычных таблиц просто создает те же издержки.
Другой подход. Используя существующие таблицы, можно дополнить строки дополнительным столбцом, чтобы определить, какие строки относятся к каждому пользователю / сеансу. Снимает нагрузку на создание / удаление таблиц, но тогда вам нужно быть параноиком с кодом, который генерирует значение для дифференциации строк, и вам придется разработать способ поддержки таблицы для тех случаев, когда сеанс преждевременно завершился и есть остатки (строки, которые не были удалены в конце обработки).
Я рекомендую переосмыслить стратегию обработки. Некоторые альтернативы так же просты, как использование коррелированных запросов, производных таблиц или табличных переменных. Взгляните на: http://www.sql -server-performance.com / article / per / temp_tables_vs_variables_p1.aspx
Редактировать: Подход к созданию и удалению обычных таблиц и подход к повторному использованию обычной таблицы, дополненный дополнительным полем: оба будут генерировать перекомпиляции плана запросов, поскольку объем измененных данных вызовет переоценку таблица статистики. Опять же, ваш лучший подход - найти альтернативные способы обработки ваших данных.