如何理解 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 是什么版本? (获取统计数据的方式在最近几个主要版本中发生了变化。)
- 请说明您希望使用基数做什么。
我是运行命令:
显示来自 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 是什么版本? (获取统计数据的方式在最近几个主要版本中发生了变化。)
- 请说明您希望使用基数做什么。