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

时间:2018-10-31 03:27:20

标签: mysql indexing cardinality

我正在运行命令:

显示来自atpco_fare的索引。atpco_r1_fare_cls

结果在表中

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 

我不理解组合主键的基数,因为它不能完全表明随着序列的增加,它应该更加独特而不是更少。至少,根据我对索引的理解,应该不少于此。

第一个问题是为什么序列号seq_nbr的基数更少。它表示什么?

第二,为什么后三个基数相同?它表示什么?

1 个答案:

答案 0 :(得分:0)

  • 基数是一个近似值。
  • 多列索引中的基数重要性不大。
  • 这8列的某些子集是否“唯一”?如果是这样,则应缩短PK。
  • 列的数据类型是什么? (请提供SHOW CREATE TABLE。)
  • 表中是否有 3100万行?如果是这样,则 estimates 表示索引已经是“唯一的”。 (这个猜测可能是错误的。)
  • 什么版本的MySQL? (获取统计信息的方法在最近的两个主要版本中已更改。)
  • 请说明您对基数的期望。