[英]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.