Символ # при создании временных таблиц в SQL Server

Пройдите тест, узнайте какой профессии подходите и получите бесплатную карьерную консультацию
В конце подарим скидку до 55% на обучение
Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

В SQL Server символ # означает локальные временные таблицы, которые доступны только в текущей сессии и удаляются после ее закрытия. Для создания глобальных временных таблиц, доступных в разных сеансах, используется ##. Эти таблицы прекращают существование, когда все процессы прекратили работу с ними. Имена обычных, постоянных таблиц не содержат символа решётки и они сохраняются в базе данных независимо от наличия активных сеансов.

Примеры создания временных таблиц:

SQL
Скопировать код
-- Создание локальной временной таблицы
CREATE TABLE #LocalTemp (ID int);
SQL
Скопировать код
-- Создание глобальной временной таблицы
CREATE TABLE ##GlobalTemp (ID int);

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

Сравнение временных таблиц и табличных переменных

Выбор между временными таблицами и табличными переменными зависит от размера данных и сложности задач обработки. Если вам нужны индексы, сложные запросы и откат транзакций, временные таблицы – ваш выбор.

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

Визуализация

Визуальная аналогия поможет лучше понять разницу:

Markdown
Скопировать код
Для постоянного хранения: 📦 (Используйте "CREATE TABLE")
Для временного хранения: 📥 (Используйте "#temp_table")

Здесь символ # указывает на временный характер:

Markdown
Скопировать код
📥 #Яблоки     Коробка для яблок на короткий срок
📥 #Апельсины  Коробка для апельсинов на короткий срок

А коробка без решётки предназначена для длительного хранения.

В SQL Server: <code>#</code> обозначает временные таблицы, доступные только в текущем сеансе.

Markdown
Скопировать код
[#] Предупреждение: содержимое внутри временное

Особенности хранения данных в таблицах

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

Рекомендации по использованию временных таблиц

Несколько советов по поводу временных таблиц:

  • Используйте индексы для быстрого выполнения запросов, как и в случае с постоянными таблицами.
  • Учтите количество строк для статистической оптимизации, учитывайте возможность устаревания статистики при обработке больших объемов данных.
  • Удаляйте временные таблицы после использования в хранимых процедурах или скриптах для освобождения ресурсов.

Дальнейшее изучение

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

Полезные материалы

  1. CREATE TABLE (Transact-SQL) – SQL Server — официальная документация Microsoft с подробным описанием процесса создания таблиц.
  2. Временные таблицы в SQL Server – Simple Talk — статья о том, как оптимально использовать временные таблицы.
  3. TEMP Tables – Форумы SQLServerCentral — энергичное обсуждение преимуществ использования временных таблиц на специализированном форуме.
  4. Постраничное разбиение в Oracle – Stack Overflow — обсуждение системы пагинации в базах данных и принципов работы, схожих с механизмами временных таблиц в SQL Server.
  5. Ключи ActionMap в Java Swing – Stack Overflow — дискуссия о работе с ключами в разных контекстах, включая SQL.