【发布时间】:2019-09-29 03:37:09
【问题描述】:
索引可以用来做这样的事情:
SELECT name FROM bigtable GROUP BY name
也就是说,它可以遍历 btree 或任何索引结构来获取值。但是,索引对这样的事情有帮助吗?
SELECT name, count(1) FROM bigtable GROUP BY name
请注意,出于此问题的目的,不会应用过滤器或排序。
我的想法是它不会因为需要表扫描(无论是否有索引)来“总结”所有值。这是正确的,还是我在这里遗漏了什么?索引对聚合计算有用吗?如何或如何不?
除了预先存储这些值之外,还有什么方法可以加快这些值的计算速度,或者这里真的只是磁盘速度的问题。
【问题讨论】:
-
聚合总是执行扫描,
table scan或index scan。在 MSSQL 中,您可以使用include列创建索引(每个示例中的数量),如果您 sum() 按索引键分组的数量列,这样做会比简单的表扫描执行得更好。
标签: sql sql-server database