繁体   English   中英

sql server执行计划-哪个查询性能好

[英]sql server execution plan - which query performance well

我正在学习SQL Server 2008执行计划,并且为了进行测试,我已经运行了两个查询并试图比较结果。

第一个查询的运行速度是否比第二个查询快? 我通常检查执行成本(性能和成本)。

第一次查询

在此处输入图片说明

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 = 0 ms, elapsed time = 0 ms.

 SQL Server Execution Times:
   CPU time = 0 ms,  elapsed time = 0 ms.

(931 row(s) affected)
Table 'Worktable'. 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 'Visits'. Scan count 2, logical reads 1235, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Assignments'. Scan count 1, logical reads 4657, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

 SQL Server Execution Times:
   CPU time = 203 ms,  elapsed time = 198 ms.

第二查询

在此处输入图片说明

SQL Server Execution Times:
   CPU time = 0 ms,  elapsed time = 0 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.

(1 row(s) affected)
Table 'Worktable'. 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 'Visits'. Scan count 1, logical reads 19335, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Assignments'. Scan count 1, logical reads 4657, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

 SQL Server Execution Times:
   CPU time = 109 ms,  elapsed time = 250 ms.

根据统计数据输出,第一个更快。 在那里寻找的内容包括经过的时间和读取/写入的次数。

第一个查询:

SQL Server Execution Times: CPU time = 203 ms, elapsed time = 198 ms.

第二查询:

SQL Server Execution Times: CPU time = 109 ms, elapsed time = 250 ms.

第一个查询的执行速度略快。 毫秒看似微不足道,但请考虑一下,对于每天实际运行数千次的查询,所有这些微小的时间都将很快开始累加。

要寻找的另一件事是读取和写入(这将表示要检索结果集必须完成的工作量。

第一个查询:

(931 row(s) affected) Table 'Worktable'. 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 'Visits'. Scan count 2, **logical reads 1235**, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. Table 'Assignments'. Scan count 1, logical reads 4657, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

第二查询:

(1 row(s) affected) Table 'Worktable'. 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 'Visits'. Scan count 1, **logical reads 19335**, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. Table 'Assignments'. Scan count 1, logical reads 4657, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

Logical reads在这种情况下代表从高速缓冲存储器,这是比较便宜的检索的数据physical reads ,其中,所述数据从物理盘检索(这就是昂贵的)。 尽管如此,少即是好。

在这种情况下,您的第一个查询运行的时间更少(经过时间= 198ms vs 250ms ),并且比第二个查询( 1235 vs 19335 )需要更少的读取,因此比第二个查询优先。

另一个提示是,在执行计划中,粗条表示更多的数据正在传递。 但是,尽管它们可以为您提供视觉提示,但是请确保对其结果进行验证,因为我遇到了显示的执行计划不准确的情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM