MySQL 显示索引
在 MySQL 中,您可以使用 SHOW INDEXES
命令从表中查询索引信息。
MySQL SHOW INDEXES
语法
查询表的索引信息,使用 SHOW INDEXES
如下语句:
SHOW INDEXES FROM db_name.table_name;
或
SHOW INDEXES FROM table_name IN db_name;
这里:
db_name
指示数据库的名字。如果您可以选择了数据库,则它可以省略。table_name
指示表的名字。- 关键字
INDEXES
可以被替换为INDEX
或者KEYS
。 - 关键字
IN
可以被替换为FROM
。 - 关键字
FROM
可以被替换为IN
。
WHERE 子句
您可以在 SHOW INDEXES
语句中使用 WHERE
语句过滤结果。如下:
SHOW INDEXES FROM db_name.table_name WHERE condition;
SHOW INDEXES
返回的列
MySQL SHOW INDEXES
语句返回以下 15 个列:
Table
- 表名
Non_unique
- 是否唯一索引。如果不是,则为 1,否则为 0。
Key_name
- 索引的名称。 主键索引的名称固定为
PRIMARY
。 Seq_in_index
- 索引中的列序号。第一列序号从 1 开始。
Column_name
- 列名
Collation
- 排序规则表示列在索引中的排序方式。
A
表示升序、B
表示降序或NULL
表示未排序。 Cardinality
-
索引基数,它是索引中唯一值的估计数量。注意,这个数字是不精确的,只是一个估计值。
-
请注意,基数越高,查询优化器使用索引进行查找的机会就越大。
Sub_part
- 索引前缀。如果整个列都被索引,则为
NULL
。否则,它会在列被部分索引的情况下显示索引字符数。 Packed
- 指示键是如何打包的;如果不是,则为
NULL
。 Null
- 如果该列可能包含
NULL
值为YES
,如果不包含则为空白。 Index_type
- 索引类型。可能的值:
BTREE
,HASH
,RTREE
,或FULLTEXT
。 Comment
- 未在其自己的列中描述的有关索引的信息。
Index_comment
- 显示创建索引时使用
COMMENT
属性指定的索引的注释。 Visible
- 索引对查询优化器是否可见或不可见;如果可见为
YES
,否则为NO
。 Expression
- 如果索引使用表达式而不是列或列前缀值时有值。此时
column_name
列为 NULL。
MySQL SHOW INDEXES
实例
在以下实例中,我们使用 Sakila 示例数据库中的 film
表进行演示。
显示全部索引
要显示 film
表中的所有的索引,请使用以下语句:
SHOW INDEXES FROM sakila.film;
+-------+------------+-----------------------------+--------------+----------------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | Expression |
+-------+------------+-----------------------------+--------------+----------------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| film | 0 | PRIMARY | 1 | film_id | A | 1000 | NULL | NULL | | BTREE | | | YES | NULL |
| film | 1 | idx_title | 1 | title | A | 1000 | NULL | NULL | | BTREE | | | YES | NULL |
| film | 1 | idx_fk_language_id | 1 | language_id | A | 1 | NULL | NULL | | BTREE | | | YES | NULL |
| film | 1 | idx_fk_original_language_id | 1 | original_language_id | A | 1 | NULL | NULL | YES | BTREE | | | YES | NULL |
+-------+------------+-----------------------------+--------------+----------------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
过滤索引
您可以使用 WHERE
子句对 SHOW INDEXES
的结果进行过滤。 比如,如果您想要从 film
表中获取所有的唯一索引,请使用以下语句:
SHOW INDEXES FROM sakila.film WHERE Non_unique = 0;
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | Expression |
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| film | 0 | PRIMARY | 1 | film_id | A | 1000 | NULL | NULL | | BTREE | | | YES | NULL |
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
结论
在 MySQL 中,索引能提高从表中查询数据的效率。您可以使用 SHOW INDEXES
语句获取一个表的索引以了解该表中的索引情况。 您还可以使用 WHERE
子句对 SHOW INDEXES
的结果进行过滤。