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
索引类型。可能的值: BTREEHASHRTREE,或 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 的结果进行过滤。