gpt4 book ai didi

sql - 哪一个性能更好: Derived Tables or Temporary Tables

转载 作者:行者123 更新时间:2023-12-02 00:19:15 25 4
gpt4 key购买 nike

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

最佳答案

派生表是一个逻辑构造。

它可能存储在 tempdb 中,通过每次访问时重新评估底层语句来在运行时构建,甚至完全优化。

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

哪一个更好取决于它们所使用的查询、用于派生表的语句以及许多其他因素。

例如,SQL Server 中的CTE(公用表表达式)可以(并且很可能会)在每次使用时重新计算。此查询:

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 记录在 id 上。

关于sql - 哪一个性能更好: Derived Tables or Temporary Tables,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2326395/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com