除了记录数外,什么影响计数(*)的速度

oll*_*lle 5 performance sql-server

我有一个类似的查询

SELECT COUNT(*) FROM Foo Where Bar = 1 AND Baz = 2
Run Code Online (Sandbox Code Playgroud)

该表有12934600条记录,其中1000001 条匹配该谓词

查看我看到的查询统计信息

(受影响的 1 行)表 'Foo'。扫描计数 1,逻辑读取1863 次,物理读取 0,预读读取 0,lob 逻辑读取 0,lob 物理读取 0,lob 预读读取 0。

(1 行受影响)

SQL Server 执行时间:CPU 时间 = 250 毫秒,已用时间 = 503 毫秒。

纵观查询计划80%的时间是在花了索引查找的酒吧和巴兹列和20%聚集的结果。

有没有办法加快这个速度,如果有的话如何?我还想了解哪些硬件组件对 CPU 或磁盘 IO 或总线速度有很大影响。

JNK*_*JNK 5

请记住,查询计划显示的成本估计与时间不同。估计的成本值是 CPU、内存和 IO 的无单位聚合,而不是每个操作执行所需的时间。还要记住,即使在“实际”执行计划中,成本值也是估计值。

此操作和大多数其他 SQL Server 操作的最大瓶颈是磁盘 IO。您的示例STATISTICS看起来来自第二次运行,因为没有物理读取,因此您会看到用于聚合/排序的更高 CPU。

如果您的WHERE谓词是一致的(即 always Bar = 1 AND Baz = 2),您可以使用过滤索引加快此特定查询的速度。

否则,我不知道有什么方法可以加快速度,而不是像索引视图那样更加激烈