admin

哪个具有更好的性能:派生表或临时表

sql

有时我们可以同时使用派生表和临时表编写查询。我的问题是哪个更好?为什么?


阅读 142

收藏
2021-05-10

共1个答案

admin

派生表是一种逻辑构造。

可以将其存储在中tempdb,在运行时通过在每次访问时重新评估基础语句来构建,甚至可以对其进行优化。

临时表是一种物理构造。它是在tempdb其中创建的表,并在其中填充了值。

哪种更好取决于查询所使用的查询,用于派生表的语句以及许多其他因素。

例如,每次使用时都可以(并且很可能会)重新评估CTEin中的(公用表表达式)SQL Server。该查询:

WITH    q (uuid) AS
        (
        SELECT  NEWID()
        )
SELECT  *
FROM    q
UNION ALL
SELECT  *
FROM    q

最有可能 产生两个不同NEWID()的。

在这种情况下,应使用临时表,因为它可以保证其值持久存在。

另一方面,此查询:

SELECT  *
FROM    (
        SELECT  *, ROW_NUMBER() OVER (ORDER BY id) AS rn
        FROM    master
        ) q
WHERE   rn BETWEEN 80 AND 100

最好使用派生表,因为使用临时表将需要从中获取所有值master,而此解决方案将只100使用索引on扫描第一条记录id

2021-05-10