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:因为单词的意思为:基数、基准的意思