使用临时表进行数据迁移与查询优化

使用临时表进行数据迁移与查询优化

当我们需要把一个数据库的数据迁移到另外一个数据库的时候,就可以大量使用临时表。临时表可以帮我们缓存临时数据,避免多次执行相同的查询。我们先把数据保存到临时表中,以后就不需要再反复执行 SELECT 查询。使用临时表也会使思路更清晰。

SELECT name,
       (SELECT TOP 1 age FROM person p WHERE p.name = per.name AND p.id != per.id) AS age
INTO #temp
FROM person per
GROUP BY per.name, per.id

SELECT * FROM #temp -- 不需要每次都读取硬盘,因为数据已经保存到内存中的临时表了Code language: PHP (php)

有临时表的操作

SELECT * FROM person
WHERE age IN
(
    SELECT age FROM #temp
)Code language: CSS (css)

没有临时表的情况

如果没有临时表,每次都要执行 IN 里面的 SELECT 语句,该语句读取的是硬盘中的实体表:

SELECT * FROM person
WHERE age IN
(
    SELECT (SELECT TOP 1 age FROM person p WHERE p.name = per.name AND p.id != per.id) AS age
    FROM person per
    GROUP BY per.name, per.id
)Code language: PHP (php)

通过临时表将中间结果物化到 tempdb 中,后续多次引用时直接读取临时表,既减少了重复计算,也降低了 IO 开销,在复杂数据迁移场景中尤为实用。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注