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 的结果进行过滤。