sql-server - 选择逻辑读取或执行时间较短的 SQL Server 查询
问题描述
我有两个来自表 A 和表 B 的查询,输出完全相同。两张表的结构和数据都是一样的,但是表A是一个没有索引的堆表。表 B 也是一个堆表,但有一个非聚集索引。
查询 A 具有较低的逻辑读取,但执行时间较长
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.
SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 0 ms.
(362805 rows affected)
Table 'Worktable'. Scan count 20619, logical reads 2070752, physical reads 0, page server reads 0, read-ahead reads 17244, 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 'Workfile'. 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 'test_orders_cluster'. Scan count 2, logical reads 13367, 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 'costanlcdate'. Scan count 2, logical reads 294, 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.
(1 row affected)
SQL Server Execution Times:
CPU time = 6609 ms, elapsed time = 38801 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.
Completion time: 2021-05-30T12:30:10.3830717+07:00
查询 B 的逻辑读取量是原来的三倍,但执行时间更短:
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.
SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 0 ms.
(362805 rows affected)
Table 'Worktable'. Scan count 1419102, logical reads 6360963, 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 'test_costanlcdate'. Scan count 2, logical reads 15770, 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 'test_orders_cluster'. Scan count 2, logical reads 13367, 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.
(1 row affected)
SQL Server Execution Times:
CPU time = 9766 ms, elapsed time = 34790 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.
Completion time: 2021-05-30T12:30:10.2686723+07:00
你能告诉我选哪一个吗?为什么?谢谢你。
解决方案
推荐阅读
- python - Pygame 玩家移动
- java - org.hibernate.exception.SQLGrammarException:无法在 heroku 中提取 ResultSet
- java - CMD/PowerShell: 'javac' 不是内部或外部命令、可运行程序或批处理文件
- google-chrome-extension - 在不同的 chrome 配置文件中打开松弛链接(用户)
- r - R中一组图的多个标题
- python - 在 Python 中重塑数组大小(Numpy)
- javascript - 在 JavaScript 对象中创建一个函数然后创建属性有什么意义?
- selenium-webdriver - Protractor:Protractor 中的 ignoreSynchronization 和 async/await 有什么区别
- node.js - 如何在 GraphQL 中获取相同的嵌套对象
- python - 降低 seaborn 线图上日期的 x 轴值密度