哪种SQL更昂贵,为什么?
上述两个查询产生相同的结果。 在我看来,第二个查询的成本更高,因为它使用的GROUPBY函数的成本更高。哪种SQL更昂贵,为什么?,sql,sql-server,database,Sql,Sql Server,Database,上述两个查询产生相同的结果。 在我看来,第二个查询的成本更高,因为它使用的GROUPBY函数的成本更高。 如果ans是正确的还是其他原因,这是正确的解释吗?与任何有关性能的问题一样,最好在系统上测试对数据的查询。索引和表大小等因素可以决定哪个更快。如果你对这样的问题感兴趣,你需要知道如何阅读它们 这就是说,我预计第一行的费用会更高,因为总工资可能首先计算,然后与每一行对齐。然后删除重复项 但是优化器可以自由地做它想做的事情,包括为两个查询生成完全相同的执行计划。与任何有关性能的问题一样,最好在系
如果ans是正确的还是其他原因,这是正确的解释吗?与任何有关性能的问题一样,最好在系统上测试对数据的查询。索引和表大小等因素可以决定哪个更快。如果你对这样的问题感兴趣,你需要知道如何阅读它们 这就是说,我预计第一行的费用会更高,因为总工资可能首先计算,然后与每一行对齐。然后删除重复项
但是优化器可以自由地做它想做的事情,包括为两个查询生成完全相同的执行计划。与任何有关性能的问题一样,最好在系统上对数据进行查询测试。索引和表大小等因素可以决定哪个更快。如果你对这样的问题感兴趣,你需要知道如何阅读它们 这就是说,我预计第一行的费用会更高,因为总工资可能首先计算,然后与每一行对齐。然后删除重复项
但是优化器可以自由地做它想做的事情,包括为两个查询生成完全相同的执行计划。您如何得出结论认为
group by
函数的成本更高
如果您使用的是Microsoft SQL Server Management Studio,则可以让应用程序告诉您哪个版本更昂贵。请参见下面屏幕截图中的指南
我的初步发现(没有任何数据)表明,对于SQL引擎而言,groupby
版本的强度较低
您是如何得出结论认为
group by
功能的成本更高的
如果您使用的是Microsoft SQL Server Management Studio,则可以让应用程序告诉您哪个版本更昂贵。请参见下面屏幕截图中的指南
我的初步发现(没有任何数据)表明,对于SQL引擎而言,groupby
版本的强度较低
检查计划并测量两个查询的CPU和逻辑IO成本。乙二醇
Select DISTINCT Dept,SUM(Salary) OVER (PARTITION BY Dept) from Table
Select Dept, SUM(Salary) FROM Table GROUP BY Dept
第二个查询的计划更复杂,成本更高:
按查询分组
use AdventureWorks2017
go
set statistics time on
set statistics IO on
go
select JobTitle, sum(SickLeaveHours) SickLeaveHours
from HumanResources.Employee
group by JobTitle
select distinct JobTitle, sum(SickLeaveHours) over (partition by JobTitle) SickLeaveHours
from HumanResources.Employee
go
set statistics time off
set statistics IO off
不同查询
Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, page server reads 0, read-ahead reads 0, page server read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob page server reads 0, lob read-ahead reads 0, lob page server read-ahead reads 0.
Table 'Employee'. Scan count 1, logical reads 9, physical reads 0, page server reads 0, read-ahead reads 0, page server read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob page server reads 0, lob read-ahead reads 0, lob page server read-ahead reads 0.
检查计划并测量两个查询的CPU和逻辑IO成本。乙二醇
Select DISTINCT Dept,SUM(Salary) OVER (PARTITION BY Dept) from Table
Select Dept, SUM(Salary) FROM Table GROUP BY Dept
第二个查询的计划更复杂,成本更高:
按查询分组
use AdventureWorks2017
go
set statistics time on
set statistics IO on
go
select JobTitle, sum(SickLeaveHours) SickLeaveHours
from HumanResources.Employee
group by JobTitle
select distinct JobTitle, sum(SickLeaveHours) over (partition by JobTitle) SickLeaveHours
from HumanResources.Employee
go
set statistics time off
set statistics IO off
不同查询
Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, page server reads 0, read-ahead reads 0, page server read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob page server reads 0, lob read-ahead reads 0, lob page server read-ahead reads 0.
Table 'Employee'. Scan count 1, logical reads 9, physical reads 0, page server reads 0, read-ahead reads 0, page server read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob page server reads 0, lob read-ahead reads 0, lob page server read-ahead reads 0.
@GordonLinoff你是对的。你可以运行它们并查看计划:)@GordonLinoff你是对的。你可以运行它们并查看计划:)