MySQL SHOW INDEX
阅读此文之前建议阅读
Mysql创建索引
Mysql删除索引
摘要:这篇文章中,我们主要了解下如何使用MYSQL SHOW INDEXS命令来查询索引的信息。
一:介绍MySQL SHOW INDEXS 命令
查询一个表中的索引,我们可以像下面这样使用SHOW INDEXS语句
SHOW INDEXES FROM table_name;
获取表的索引,注意要在FROM关键字后指定表名,之后上面的语句就会返回与当前数据库中的表关联的索引信息。
同时也可以指定数据库的名字
SHOW INDEXES FROM table_name
IN database_name;
或者是这样的
SHOW INDEXES FROM database_name.table_name;
二:MySQL SHOW INDEXES 举例
首先创建一个命名为contacts的表,然后用这个表来展示SHOW INDEXS命令的使用
CREATE TABLE contacts(
contact_id INT AUTO_INCREMENT,
first_name VARCHAR(100) NOT NULL,
last_name VARCHAR(100) NOT NULL,
email VARCHAR(100),
phone VARCHAR(20),
PRIMARY KEY(contact_id),
UNIQUE(email),
INDEX phone(phone) INVISIBLE,
INDEX name(first_name, last_name) comment 'By first name and/or last name'
);
使用下面的命令就能返回contacts表所有的索引信息
SHOW INDEXES FROM contacts;
结果如下:

下面我们一起了解下返回的这张表的含义:
1.Table: 表名
2.Non_unique: 如果索引不能包括重复值则为0,如果可以则为1。也就是平时所说的唯一索引。
3.Key_name 索引名称,如果名字相同则表明是同一个索引,而并不是重复,比如上图中的第四、五条数据,索引名称都是name,其实是一个联合索引。
4.Seq_in_index 索引中的列序列号,从1开始。上图中的四、五条数据,Seq_in_index一个是1一个是2,就是表明在联合索引中的顺序,我们就能推断出联合索引中索引的前后顺序。
5.Column_name 索引的列名。
6.Collation指的是列以什么方式存储在索引中,大概意思就是字符序。
7.Cardinality 是基数的意思,表示索引中唯一值的数目的估计值。我们知道某个字段的重复值越少越适合建索引,所以我们一般都是根据Cardinality来判断索引是否具有高选择性,如果这个值非常小,那就需要重新评估这个字段是否适合建立索引。
8.Sub_part 前置索引的意思,如果列只是被部分地编入索引,则为被编入索引的字符的数目。如果整列被编入索引,则为NULL。
9.Packed 指示关键字如何被压缩。如果没有被压缩,则为NULL。压缩一般包括压缩传输协议、压缩列解决方案和压缩表解决方案。
10.Null 如果列含有NULL,则含有YES。
11.Index_type表示索引类型,Mysql目前主要有以下几种索引类型:FULLTEXT,HASH,BTREE,RTREE。
12.Comment Index_comment 注释的意思。
总结下,这篇文章主要是探讨了MySQL SHOW INDEX 命令的使用,建议大家亲自运行下文中代码。
翻译参考
1.MySQL SHOW INDEXES