如何理解 MySQL 中的组合主基数

How to understand the cardinality in a combined primary in MySQL

我是运行命令:

显示来自 atpco_fare.atpco_r1_fare_cls 的索引;

结果在 table

Table, Non_unique, Key_name, Seq_in_index, Column_name, Collation, Cardinality, Sub_part, Packed, Null, Index_type, Comment, Index_comment, Visible 
atpco_r1_fare_cls   0   PRIMARY 1   tar_nbr A   7707    BTREE   YES 
atpco_r1_fare_cls   0   PRIMARY 2   carr_cd A   46531   BTREE   YES 
atpco_r1_fare_cls   0   PRIMARY 3   rule_nbr    A   426326  BTREE   YES 
atpco_r1_fare_cls   0   PRIMARY 4   fare_cls    A   30087162    BTREE   YES 
atpco_r1_fare_cls   0   PRIMARY 5   seq_nbr A   21610918    BTREE   YES 
atpco_r1_fare_cls   0   PRIMARY 6   mcn A   31260526    BTREE   YES 
atpco_r1_fare_cls   0   PRIMARY 7   eff_date    A   31260526    BTREE   YES 
atpco_r1_fare_cls   0   PRIMARY 8   proc_ind    A   31260526    BTREE   YES 

我不明白组合主键的基数,因为它没有完全表明随着序列的增加它应该更唯一而不是更少。至少,应该不会少,以我对index的理解。

第一个问题是为什么序号seq_nbr的基数较小。它说明了什么?

其次,为什么最后三个基数相同?它说明了什么?

  • 基数是一个近似值。
  • 多列索引中的基数非常不重要。
  • 那 8 列的某个子集 'unique'?如果是这样,你应该缩短PK。
  • 列的数据类型是什么? (请提供SHOW CREATE TABLE。)
  • table 中是否有 大约 31M 行?如果是这样,那么 估计 表明索引已经 'unique'。 (这个猜测可能是错误的。)
  • MySQL 是什么版本? (获取统计数据的方式在最近几个主要版本中发生了变化。)
  • 请说明您希望使用基数做什么。