问题描述
我通常使用 MysqL 命令 show index 来了解索引效率。这是一个有 16 列(最大)的索引。
show index from the table;
请看截图。 enter image description here
我觉得奇怪的是,在索引序列接近11后,基数减少,然后又增加。 这是我第一次看到这种行为。我一直认为Cardinality会随着索引序列的增加而增加。不同之处在于增加的幅度有多大。索引序列越早,索引效率越好。所以我想了解如何减少基数。这意味着添加值可能会减少整体不同的值。但这怎么可能呢?它是否反映了我的索引设计中有什么不好的地方?
谢谢
解决方法
基数通常是对索引中唯一值数量的估计,因此并不总是准确的。参考https://dev.mysql.com/doc/refman/8.0/en/show-index.html:
基数是根据存储为整数的统计信息计算的,因此即使对于小表,该值也不一定准确。
,经验法则:索引中的列不要超过 5 列。
让我们看看促使您创建该索引的 SELECT
。
基数数字表示:“前 N 列的基数在该输出的第 N 行中给出。”使用索引时,只会使用前 N 列;其余的将被忽略。当然,希望N是索引中的列数。
通常,基数与任何事情都没有太大关系。再给我一个例子,我会用一个论据(或不)来支持我的陈述。
基数值是估计值,有时是非常粗略的估计值。不要在波动中读到任何东西。