MySQL 8 中如何理解基数随着索引序列的增加而减少
How to understand the cardinality decreased with the index sequence increasing in MySQL 8
我一般使用MySQL命令show index来了解索引效率。这是一个有 16 列(最大)的索引。
show index from the table;
请看截图。
enter image description here
奇怪的是索引序列趋近11后Cardinality下降,然后又上升。
这是我第一次看到这种行为。我一直认为Cardinality会随着索引序列的增加而增加。不同之处在于增加的幅度有多大。索引序列越靠前,索引效率越好。所以我想了解如何减少基数。这意味着增加值可能会减少整体不同的值。但这怎么可能呢?它是否反映出我的索引设计有什么不好的地方?
谢谢
基数通常是对索引中唯一值数量的估计,因此并不总是准确的。参考https://dev.mysql.com/doc/refman/8.0/en/show-index.html:
Cardinality is counted based on statistics stored as integers, so the value is not necessarily exact even for small tables.
经验法则:索引中的列不要超过 5 个。
让我们看看 SELECT
促使您创建该索引的原因。
基数表示:“前 N 列的基数在该输出的第 N 行给出。”使用索引时,只会使用前 N 列;其余的将被忽略。当然,希望N是索引的列数。
一般来说,基数对任何事情都没有太大的影响。再一次,给我一个例子,我可能会(或不)论据来支持我的陈述。
基数值是估计值,有时是非常粗略的估计值。不要在波动中解读任何东西。
我一般使用MySQL命令show index来了解索引效率。这是一个有 16 列(最大)的索引。
show index from the table;
请看截图。 enter image description here
奇怪的是索引序列趋近11后Cardinality下降,然后又上升。 这是我第一次看到这种行为。我一直认为Cardinality会随着索引序列的增加而增加。不同之处在于增加的幅度有多大。索引序列越靠前,索引效率越好。所以我想了解如何减少基数。这意味着增加值可能会减少整体不同的值。但这怎么可能呢?它是否反映出我的索引设计有什么不好的地方?
谢谢
基数通常是对索引中唯一值数量的估计,因此并不总是准确的。参考https://dev.mysql.com/doc/refman/8.0/en/show-index.html:
Cardinality is counted based on statistics stored as integers, so the value is not necessarily exact even for small tables.
经验法则:索引中的列不要超过 5 个。
让我们看看 SELECT
促使您创建该索引的原因。
基数表示:“前 N 列的基数在该输出的第 N 行给出。”使用索引时,只会使用前 N 列;其余的将被忽略。当然,希望N是索引的列数。
一般来说,基数对任何事情都没有太大的影响。再一次,给我一个例子,我可能会(或不)论据来支持我的陈述。
基数值是估计值,有时是非常粗略的估计值。不要在波动中解读任何东西。