如何解决如果一个查询的逻辑读数较低,而其他查询的相对查询成本较低,则哪个查询的性能更好?
我有两个给出相同结果的查询。
第一个查询:
Select c1.CustomerID,o1.CustomerID
From Customers As c1
Left Join Orders As o1 On c1.CustomerID = o1.CustomerID
Where o1.CustomerID Is Null
第二个查询:
Select c1.CustomerID,Null As CustomerID
From Customers As c1
Where c1.CustomerID Not In (Select CustomerID From Orders)
两者都返回相同的结果。但是时间和IO的统计信息不同。
> SQL Server parse and compile time: CPU time = 0 ms,elapsed time = 0 ms.
>
> SQL Server Execution Times: CPU time = 0 ms,elapsed time = 0 ms.
> SQL Server parse and compile time: CPU time = 10 ms,elapsed time = 10 ms.
>
> (2 rows affected) Table 'Workfile'. Scan count 0,logical reads 0,> physical reads 0,read-ahead reads 0,lob logical reads 0,lob
> physical reads 0,lob read-ahead reads 0. Table 'Worktable'. Scan
> count 0,physical reads 0,lob
> logical reads 0,lob physical reads 0,lob read-ahead reads 0. Table
> 'Orders'. Scan count 1,logical reads 22,read-ahead
> reads 0,lob read-ahead
> reads 0. Table 'Customers'. Scan count 1,logical reads 5,physical
> reads 0,lob physical reads
> 0,lob read-ahead reads 0.
>
> (1 row affected)
>
> SQL Server Execution Times: CPU time = 0 ms,elapsed time = 180
> ms.
>
> (2 rows affected) Table 'Orders'. Scan count 1,logical reads 510,lob read-ahead reads 0. Table 'Customers'. Scan
> count 1,elapsed time = 150
> ms. SQL Server parse and compile time: CPU time = 0 ms,elapsed
> time = 0 ms.
>
> SQL Server Execution Times: CPU time = 0 ms,elapsed time = 0 ms.
以下是查询计划:
第一次查询的相对查询成本为62%,第二次查询的相对查询成本为38%。但是,第一种情况下的逻辑读取为22 + 5 = 27,而第二种情况下为515。
那么哪个查询被认为表现更好?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。