如何理解 MySQL 8 中基数随着索引序列的增加而减少

问题描述

我通常使用 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是索引中的列数。

通常,基数与任何事情都没有太大关系。再给我一个例子,我会用一个论据(或不)来支持我的陈述。

基数值是估计值,有时是非常粗略的估计值。不要在波动中读到任何东西。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...