在阅读阿里云公众号的一篇文章MySQL索引你用对了吗?的时候, 发现了一个show index命令, 因为之前没有用到过, 特此记录一下
SHOW INDEX命令
SHOW INDEX 是 MySQL 中用于查询某个表中所有索引信息的 SQL 语句, 下面是对于结果集中各列的解读:
-
Table: 表名
-
Non_unique: 该索引是否允许重复值 0 不允许 1 允许
-
Key_name: 索引名
-
Seq_in_index: 在索引中的位置, 从1开始; 如果是单列索引则值为1, 如果是多列索引, 则按照顺序为1,2以此类推
-
Column_name: 列名
-
Cardinality: 估计的索引中唯一值的数量,对于选择合适的查询优化策略有一定参考价值。
-
Collation: 索引列的排序规则,如 A(升序)、D(降序)或 NULL(无特定顺序)。
-
Sub_part: 如果索引只覆盖了列的一部分(即对列进行了前缀索引),此列显示索引所使用的列前缀长度。
-
Packed: 是否对索引数据进行了压缩存储,以及采用的压缩类型。
-
Null: 指示索引列是否允许存储 NULL 值。
-
Index_type: 索引的类型,如 BTREE、HASH、FULLTEXT 等。
-
Comment: 注释
Cardinality解读
在 SHOW INDEX FROM 结果中,Cardinality 列表示索引的基数,即该索引列中预计存在的唯一值数量(这是个估算值)。如果索引列的值分布均匀且差异较大,那么 Cardinality 值通常较高;反之,如果列中存在大量重复值或数据分布极不均匀,Cardinality 值会较低。
查询优化器在制定执行计划时会参考 Cardinality 值。一般来说,Cardinality 越高,意味着索引的选择性越好,即索引有助于筛选出的数据量占总数据量的比例更大。
关于示例
这里就不给大家展示例子了, 大家找自己的业务表实际看一下理解起来更深刻, 我觉得这里面最重要的应该就是Cardinality
这个值了