2012-12-31 70 views
2

我从来没有听说过覆盖索引,只是碰到它们。我读他们this page和它说..优化覆盖索引的使用

“覆盖索引可以大大加快数据检索,但本身可能是大的,由于额外的按键,它们会减慢数据插入&更新。为了减少这种索引大小,一些系统允许在索引中包含非关键字段非关键字段本身并不是索引排序的一部分,但只包含在叶级别,允许索引尺寸较小的覆盖索引。

所以我的问题是你怎么知道你的系统是否允许在索引中包含非关键字段?

+4

*您如何知道您的系统是否允许将非关键字段包含在索引中*:您检查系统的文档。但是,为了加快搜索速度,MySQL不支持在索引内指定非键列。 [这个答案](http://stackoverflow.com/a/13387903/1048425)提供了一个可能的解决方法。 – GarethD

+0

MySQL不支持这个。 @GarethD你应该加上这个答案,以便他能接受。 –

+1

@GarethD是的,知道了这个选择,但是为了避免大索引大小的开销。 – Brett

回答

3

MySQL没有(当前)支持非Key列。对于其他DMBS,您需要检查参考手册。

A similar question已被询问并在这里回答。然而,由于使用覆盖索引所带来的性能提升通常对于返回大量行的非选择性查询而言更大,所以我无法想象只是在索引本身中包含额外的列以提供性能改进的解决方案。但是,可能有些情况我没有想到,你可能就是其中之一,所以在寻找性能改进时,测试,执行计划和IO统计数据会告诉你远远超过我的猜想!