当前位置:  开发笔记 > 后端 > 正文

索引和列

如何解决《索引和列》经验,为你挑选了3个好方法。

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



1> SquareCog..:

对不起,目前还不清楚你在问什么.

你问,它会加快一个查询,如

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

如果您在数量上添加了索引?

如果这是问题,那么答案是否定的.一般来说,当你需要在众多行中找到几行时,索引是有用的; 在这里你需要所有行,所以索引没有帮助.

有一个模糊的异常(很少适用,大多数数据库优化器可能都不会执行这个技巧).如果您的查询恰好是

SELECT sum(foo) FROM bar

,foo上有一个索引,bar是一个包含很多列的表,可以读入完整的索引,产生比你读取基础表更小的命中,并直接从索引中得到答案 - 永远不必触摸"真正的"桌子!但是,这是一个相当罕见的情况,您需要测试优化器是否知道这样做,然后再依赖于此.


+1,因为它是索引的有趣用法。

2> Spencer Rupo..:

否.索引通过限制需要检查的次数来改进搜索.无论如何,聚合函数(count,max,min,sum,avg)必须遍历列中的所有条目.



3> Michael Buen..:

如果要更快地求和,可以预先实现结果.在Oracle上,使用物化视图,在MS SQL上使用索引视图.

在您的具体问题"正在为正在求和的列创建索引比没有索引更快吗?",答案是否定的.

您的问题的答案取决于斯宾塞的答案:

"聚合函数(count,max,min,sum,avg)必须遍历要求的列中的所有条目."

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

推荐阅读
勤奋的瞌睡猪_715
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有