Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


15.7.7.23 显示索引语句

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 子句可以用于选择使用更通用的条件,详见第28.8节,“SHOW 语句扩展”

SHOW INDEX 返回以下字段:

  • Table

    表名。

  • Non_unique

    0 如果索引不能包含重复值,1 如果可以。

  • Key_name

    索引名。如果索引是主键,名称总是 PRIMARY

  • Seq_in_index

    索引中的列顺序号,从 1 开始。

  • Column_name

    列名。详见 Expression 列的描述。

  • Collation

    索引中列的排序方式。该值可以是 A (升序)、 D (降序) 或 NULL (未排序)。

  • Cardinality

    索引中的唯一值估算。要更新该值,请运行 ANALYZE TABLE 或(对于 MyISAM 表) myisamchk -a

    Cardinality 的值是基于存储的整数统计,因此对于小表的值可能不准确。Cardinality 值越高,MySQL 在执行 join 操作时使用索引的可能性越高。

  • Sub_part

    索引前缀,即列的部分索引,如果列只部分索引,否则为 NULL

    Note

    前缀limits以字节为单位。然而,对于CREATE TABLEALTER TABLECREATE INDEX语句中的索引指定,lengths为非二进制字符串类型(CHARVARCHARTEXT)的字符数,为二进制字符串类型(BINARYVARBINARYBLOB)的字节数。在指定非二进制字符串列的前缀长度时,需要考虑字符集的多字节特性。

    关于索引前缀的详细信息,请参见第10.3.5节,“列索引”第15.1.15节,“CREATE INDEX 语句”

  • Packed

    表示键的打包方式。NULL如果不是。

  • Null

    包含YES如果列可能包含NULL值,并且''如果不。

  • Index_type

    索引方法(BTREEFULLTEXTHASHRTREE)。

  • Comment

    索引的其他信息,不在其自己的列中,如disabled如果索引被禁用。

  • Index_comment

    索引的注释,使用COMMENT属性创建索引时提供的注释。

  • Visible

    索引是否可见于优化器。请参见第10.3.12节,“不可见索引”

  • Expression

    MySQL 支持函数式键部分(见Functional Key Parts);这影响了Column_nameExpression列:

    • 对于非函数式键部分,Column_name表示被键部分的列,并且ExpressionNULL

    • 对于函数式键部分,Column_name列是NULL,并且Expression表示键部分的表达式。

关于表索引的信息也可以从 INFORMATION_SCHEMA STATISTICS 表中获取。请参阅第28.3.34节,“INFORMATION_SCHEMA STATISTICS 表”。关于隐藏索引的详细信息只能使用 SHOW EXTENDED INDEX,不能从 STATISTICS 表中获取。

您可以使用 mysqlshow -k db_name tbl_name 命令来列出表的索引。

SHOW INDEX 默认情况下包括表的生成不可见键,如果表有一个,否则可以通过设置 show_gipk_in_create_table_and_information_schema = OFF 来抑制该信息在语句输出中。更多信息,请参阅第15.1.20.11节,“生成不可见主键”