我正在使用InnoDB。我的索引选择性(基数/总行数)是< 100%,大约96-98%。
我想知道不是键的一部分的列是否也按排序顺序存储。这会影响我桌子的设计。
还有兴趣了解当索引选择性<1时,我可以预期的查找性能下降程度。 100%。
(我得到这些问题,因为对于InnoDB,它只提到索引是聚集的,并且在索引之后存储了TID / RP)
答案 0 :(得分:1)
不,对于非键列的顺序无关紧要。
你的第二个问题的答案更为复杂 - 我将会介绍它,因为我认为你可能会误解InnoDB -
索引有两种类型,主要和次要。
主键索引是聚簇的 - 也就是说,数据存储在B + Tree的叶子中。按主键查找只是一个树遍历,你已经找到了你要查找的行。
通过辅助密钥查找需要搜索辅助密钥,找到匹配的主键行,然后查看主键以获取数据。
您只需要担心二级(非群集)索引的选择性,因为主(聚簇)索引的选择性始终为1.二级索引的选择性要求变化很大 - 一个;它取决于索引的宽度与行的宽度。它还取决于你是否有内存适合,因为如果辅助键没有“跟随”主键,它可能会导致随机IO从聚集索引中查找每一行。