为正在求和的列创建索引是否比没有索引更快?

有帮助吗?

解决方案

对不起,目前尚不清楚你的要求。

你是问,这将加快查询,如

SELECT product, sum(quantity) FROM receipts 
GROUP BY product

如果在添加量的索引?

如果这是个问题,则答案是否定的。一般来说,指数是有帮助的,当你需要找到刚才在许多几排;在这里你需要的所有行,所以指数没有帮助。

有一个不起眼的例外(适用所以很少最DB优化可能不打扰实现这一招)。如果查询恰好是

SELECT sum(foo) FROM bar

,其中存在于foo的指标,酒吧是很多列的表,可以在完整的索引读取,招致比如果你读了下面的表更小的打击,并直接从得到的答案指数 - 永远不必接触“真正的”表在所有!这是一个相当罕见的情况,但是,你将要测试你的优化器知道靠这个太之前做到这一点。

其他提示

没有。指标通过限制需要多少检查,改进搜索。一个聚集函数(计数,最大值,最小值,求和,平均)具有通过在一列中的所有项运行而不管

如果你想让求和更快,你可以预先具体化结果。在 Oracle 上,使用 物化视图, 关于 MS SQL 使用 索引视图.

关于您的具体问题“为正在求和的列创建索引是否比没有索引更快?”,答案是否定的。

你的问题的答案在于斯宾塞的回答:

“无论如何,聚合函数(计数、最大值、最小值、总和、平均值)都必须遍历要求和的列中的所有条目。”

刚刚澄清了斯宾塞答案中专栏的背景。尽管如此,他的回答还是正确的。

如果索引覆盖,它通常会更快。如何更快的将通过在表与索引数列数之间的差额进行确定。此外,如果存在任何过滤标准可能更快。

我发现索引使用此查询时在其中的柱(这里PRODUCTID)帮助:

选择的productid,总和(数量)FROM收据WHERE的productid = 1 GROUP BY的productid

从45秒去几乎是一瞬间我的一个疑问的,一旦我添加索引。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top