SQL запрос с использованием временной таблицы и фактической таблицы - PullRequest
0 голосов
/ 04 апреля 2020

Какие предпочтения и преимущества для обработки с использованием временной таблицы или процесса с использованием фактической таблицы в SQL Server 2016 и выше?

Это SQL запросы для обработки с использованием временной таблицы:

DROP TABLE IF EXIST #temp1;

SELECT 
    a.col1 AS col1, a.col2 AS col2, 
    b.col1 AS col3, b.col2 AS col4
INTO #temp1
FROM table1 AS a
INNER JOIN table2 AS b ON a.id = b.id
WHERE a.col1 = 'best_practice'
   OR a.col1 = 'performance' ;

INSERT INTO schema1.destination_table (col1, col2, col3, col4)
    SELECT col1, col2, col3, col4
    FROM #temp1 ;

Это SQL запросы с использованием фактической таблицы:

TRUNCATE TABLE schema1.process_table;

INSERT INTO schema1.process_table (col1, col2, col3, col4)
    SELECT 
        a.col1 AS col1, a.col2 AS col2, 
        b.col1 AS col3, b.col2 AS col4
    FROM 
        table1 AS a
    INNER JOIN 
        table2 AS b ON a.id = b.id
    WHERE 
        a.col1 = 'performance'
        OR a.col1 = 'performance' ;

INSERT INTO schema1.destination_table (col1, col2, col3, col4)
    SELECT col1, col2, col3, col4
    FROM #temp1;

DDL ( Скрипт определения языка данных) для таблицы процессов:

CREATE TABLE schema1.destination_table
( 
    col1 AS VARCHAR(10) NULL,
    col2 AS VARCHAR(10) NULL,
    col3 AS VARCHAR(10) NULL,
    col4 AS VARCHAR(10) NULL  
);

Ответы [ 2 ]

0 голосов
/ 04 апреля 2020

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

В общем, я настоятельно рекомендую в зависимости от производительности оптимизатора базы данных. Много, много лет усилий ушло на оптимизацию. Обычно они работают довольно хорошо, а когда нет, обычно достаточно HINT.

В некоторых редких случаях временные таблицы могут ускорить обработку запросов; на ум приходят три:

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

Если вы просто сохраняете результаты в другой таблице, ни один из них не имеет значения.

0 голосов
/ 04 апреля 2020

Вот несколько ключевых выводов

  1. Временные таблицы сохраняются на диске, где находится tempdb , тогда как постоянная таблица сохраняется там, где вы находитесь в реальной базе данных находится
  2. Область локальной временной таблицы определяется сессионным значением c, это означает, что если у вас есть два параллельных процесса с одинаковым именем временной таблицы, оба процесса будут иметь свою собственную временную таблицу. Принимая во внимание, что в постоянной таблице вы должны быть особенно осторожны, если эта же таблица используется другим процессом в то же время.
  3. Временные таблицы будут автоматически удалены после завершения сеанса, тогда как вам нужно вручную удалить (если вы sh к) фактическая таблица.

Вы должны использовать временную таблицу для выполнения промежуточных операций перед вставкой данных в фактическую таблицу. Для получения дополнительной информации о временных таблицах см. SQL Таблицы временных параметров сервера .

PS: Несмотря на то, что временная таблица удаляется автоматически по окончании сеанса, рекомендуется удалить временную таблицу вручную, если она больше не нужен в сеансе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...