在InnoDB中,列不是按排序顺序存储的索引的一部分吗?

时间:2010-08-21 22:50:49

标签: mysql innodb

我正在使用InnoDB。我的索引选择性(基数/总行数)是< 100%,大约96-98%。

  • 我想知道不是键的一部分的列是否也按排序顺序存储。这会影响我桌子的设计。

  • 还有兴趣了解当索引选择性<1时,我可以预期的查找性能下降程度。 100%。

(我得到这些问题,因为对于InnoDB,它只提到索引是聚集的,并且在索引之后存储了TID / RP)

1 个答案:

答案 0 :(得分:1)

不,对于非键列的顺序无关紧要。

你的第二个问题的答案更为复杂 - 我将会介绍它,因为我认为你可能会误解InnoDB -

索引有两种类型,主要和次要。

主键索引是聚簇的 - 也就是说,数据存储在B + Tree的叶子中。按主键查找只是一个树遍历,你已经找到了你要查找的行。

通过辅助密钥查找需要搜索辅助密钥,找到匹配的主键行,然后查看主键以获取数据。

您只需要担心二级(非群集)索引的选择性,因为主(聚簇)索引的选择性始终为1.二级索引的选择性要求变化很大 - 一个;它取决于索引的宽度与行的宽度。它还取决于你是否有内存适合,因为如果辅助键没有“跟随”主键,它可能会导致随机IO从聚集索引中查找每一行。