gpt4 book ai didi

sql - 为什么嵌套的 select 语句比临时表需要更长的时间来处理?

转载 作者:行者123 更新时间:2023-12-04 23:57:06 24 4
gpt4 key购买 nike

如果这是一个重复的和/或明显的问题,请原谅我,但我无法在 stackoverflow 或在线其他地方找到满意的答案。

使用 Microsoft SQL Server,我有一个如下所示的嵌套选择查询:

select * 
into FinalTable
from
(select * from RawTable1 join RawTable2)
join
(select * from RawTable3 join RawTable4)

不使用嵌套选择,可以使用临时表编写查询,如下所示:

select * 
into Temp1
from RawTable1 join RawTable2

select *
into Temp2
from RawTable3 join RawTable4

select *
into FinalTable
from Temp1 join Temp2

虽然等效,但第二个(非嵌套)查询的运行速度比第一个(嵌套)查询快几个数量级。在我的开发服务器和客户端服务器上都是如此。为什么?

最佳答案

数据库引擎在执行时将子查询保存在必要的内存中,因为它们是虚拟的而不是物理的,优化器无法选择最佳路径,或者至少在计划中排序之前不能。这也意味着优化器将对每个操作进行多次全表扫描,而不是对临时表进行可能的索引查找。

将每个子查询视为一个杂耍球。您为数据库引擎提供的子查询越多,它同时处理的事情就越多。如果您使用临时表在成批代码中对此进行简化,优化器会找到一条清晰的路线,在大多数情况下也与索引无关,至少对于更新版本的 SQL Server 而言。

关于sql - 为什么嵌套的 select 语句比临时表需要更长的时间来处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26661807/

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