MySQL的show index 选择率

show index from tbl_name\G;

里面的每个字段信息各代表什么呢?

DROP TABLE IF EXISTS t;

CREATE TABLE t(

a  int not null,

b varchar(2000) ,

c int not null,

d int,

e varchar(200),

primary key(a),

key idx_b(b),

key idx_c(c),

key idx_c_b(c,b),

unique key(d),

key idx_e(e(10))

)engine=innodb;

MySQL>show index from t;

+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+

| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |

+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+

| t    |          0 | PRIMARY  |            1 | a          | A        |          0 |    NULL | NULL  |      | BTREE      |        |              |

| t    |          0 | d        |            1 | d          | A        |          0 |    NULL | NULL  | YES  | BTREE      |        |              |

| t    |          1 | idx_b    |            1 | b          | A        |          0 |      191 | NULL  | YES  | BTREE      |        |              |

| t    |          1 | idx_c    |            1 | c          | A        |          0 |    NULL | NULL  |      | BTREE      |        |              |

| t    |          1 | idx_c_b  |            1 | c          | A        |          0 |    NULL | NULL  |      | BTREE      |        |              |

| t    |          1 | idx_c_b  |            2 | b          | A        |          0 |      191 | NULL  | YES  | BTREE      |        |              |

| t    |          1 | idx_e    |            1 | e          | A        |          0 |      10 | NULL  | YES  | BTREE      |        |              |

+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+

7 rows in set (0.00 sec)

#说明

TABLE:索引所在的表名

Non_unique:非唯一的索引,必须要唯一, 例如上面定义到主键a,unique d  都是显示是0

Key_name:索引的名字

Seq_in_index:索引中该列的位置,如idx_c_b 的联合索引

Column_name:索引列的名称

Collation:列是以什么方式存在在索引中索引中的,可以是A或是NULL,B+树索引总是A,即是排序的。如果使用了Heap存储引擎,并且建立了Hash索引,这里就会显示NULL了

因为Hash根据hash桶存放索引数据的,而不是对数据进行排序。

Cardinalilty:这个值非常关键,表示索引中唯一值的数目的估计值。Cardinality表的行数应尽可能接近1(为什么?怎么计算这个值?),下面会对这个字段进行详细的说明:

Sub_part:是否是列的部分索引,例如上面的idx_e就显示10,表示只对e列的前10个字符进行索引。如果索引整个列,则该字段为NULL。(idx_b,idx_c_b为什么只索引191个呢?)

Packed:关键字如何被压缩。若没有,则显示为NULL

Null:是否索引的列含有NULL值,例如看到的idx_b,就表示可以有NULL值,所以显示YES,而主键和定义了c列就不允许有NULL值

Index_type:索引的类型,InnoDB存储引擎只支持B+树索引,所以这里显示的都是BTREE。

Comment:注释

Index_comment:索引注释

////////////////////////////////////////

Cardinalilty:因为单词的意思为:基数、基准的意思

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/e25e214872a52c258b03180c4192b3b6.html