SHOW INDEX 语句
SHOW [EXTENDED] {INDEX | INDEXES | KEYS}
{FROM | IN} tbl_name
[{FROM | IN} db_name]
[WHERE expr]
复制
SHOW INDEX 返回表索引信息。格式类似于 ODBC 中的 SQLStatistics 调用。此语句需要对表中的列具有某些权限。
mysql> SHOW INDEX FROM City\G
*************************** 1. row ***************************
Table: city
Non_unique: 0
Key_name: PRIMARY
Seq_in_index: 1
Column_name: ID
Collation: A
Cardinality: 4188
Sub_part: NULL
Packed: NULL
Null:
Index_type: BTREE
Comment:
Index_comment:
Visible: YES
Expression: NULL
*************************** 2. row ***************************
Table: city
Non_unique: 1
Key_name: CountryCode
Seq_in_index: 1
Column_name: CountryCode
Collation: A
Cardinality: 232
Sub_part: NULL
Packed: NULL
Null:
Index_type: BTREE
Comment:
Index_comment:
Visible: YES
Expression: NULL
复制
tbl_name FROM db_name 语法可以用 db_name.tbl_name 来替代。这两种语句是等价的:
SHOW INDEX FROM mytable FROM mydb;
SHOW INDEX FROM mydb.mytable;
复制
选的 EXTENDED 关键字使输出包含有关 MySQL 内部使用的、用户无法访问的隐藏索引的信息。
WHERE 子句可用于更通用的条件选择。
SHOW INDEX 返回以下字段:
● Table
表的名称。
● Non_unique
如果索引不能包含重复项,则为0;如果可以,则为1。
● Key_name
索引的名称。如果索引是主键,则名称始终是 PRIMARY。
● Seq_in_index
索引中的列序列号,从1开始。
● Column_name
列名。
● Collation
列在索引中的排序方式。其值可以是 A(升序)、D(降序)或 NULL(未排序)。
● Cardinality
对索引中唯一值的数量的估计。要更新此数字,请运行 ANALYZE TABLE 或(对于 MyISAM 表)myisamchk -a。
基数是基于存储为整数的统计信息来计算的,因此即使对于小表,该值也不一定精确。基数越高,MySQL 在执行连接时使用索引的可能性就越大。
● Sub_part
索引前缀。也就是说,如果列仅被部分索引,则为索引字符数;如果整列被索引,则为 NULL。
注意
前缀限制以字节为单位。但是,CREATE TABLE、ALTER TABLE 和 CREATE INDEX 语句中索引规范的前缀长度被解释为非二进制字符串类型(CHAR、VARCHAR、TEXT)的字符数和二进制字符串类型(BINARY、VARBINARY、BLOB)的字节数。当为使用多字节字符集的非二进制字符串列指定前缀长度时,请考虑这一点。
● Packed
指示索引的压缩方式。如果不是,则为 NULL。
● Null
如果列可能包含 NULL 值,则包含 YES;否则为 ''。
● Index_type
使用的索引方法(BTREE、FULLTEXT、HASH、RTREE)。
● Comment
索引未在其自己的列中描述的信息,例如如果索引被禁用,则为 disabled。
● Index_comment
创建索引时,使用 COMMENT 属性为索引提供的注释。
● Visible
索引对优化器是否可见。
● Expression
MySQL 8.0.13 及更高版本支持函数索引,它同时影响 Column_name 和 Expression 列:
■ 对于非函数索引,Column_name 表示索引的列,Expression 为空。
■ 对于函数索引,Column_name 列为 NULL,Expression 表示索引的表达式。
关于表索引的信息也可以从 INFORMATION_SCHEMA STATISTICS 表中获得。有关隐藏索引的扩展信息只能使用 SHOW EXTENDED INDEX 获得;不能从 STATISTICS 表中获得。
还可以使用 mysqlshow -k db_name tbl_name 命令列出表的索引。
官方文档:
https://dev.mysql.com/doc/refman/8.0/en/show-index.html