【发布时间】:2019-01-02 23:12:09
【问题描述】:
我观察到,根据查询进行全表扫描所需的时间不同。我相信在类似的条件下(选择下的列集,列数据类型),表扫描应该花费类似的时间。似乎并非如此。我只是想了解这背后的原因。
我在查询之前使用了 "CHECKPOINT" 和 "DBCC DROPCLEANBUFFERS",以确保查询缓存没有影响。
表格:
- 10 列
- 10M 行 每列有不同的密度,范围从 0.1 到 0.000001
- 没有索引
查询:
查询 A: 返回 100 行,耗时:~ 900 毫秒
SELECT [COL00]
FROM [TEST].[dbo].[Test]
WHERE COL07 = 50000
查询 B: 返回 910595 行,耗时:~ 15000ms
SELECT [COL00]
FROM [TEST].[dbo].[Test]
WHERE COL01 = 5
** 其中 COL07 列随机填充了 0 到 100000 之间的整数,而 COL01 列随机填充了 0 到 10 之间的整数
花费时间:
- 查询 A:大约 900 毫秒
- 查询 B:大约 18000 毫秒
我在这里错过了什么?
【问题讨论】:
-
在第二次测试中要获取大约 x100 多行,这只能解释为什么它需要 20 倍的时间
-
切换到 count(1) 作为结果。
标签: sql sql-server database tsql query-performance