Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

15.7.7.23 显示索引语句

SHOW [EXTENDED] {INDEX | INDEXES | KEYS}
    {FROM | IN} tbl_name
    [{FROM | IN} db_name]
    [WHERE expr]

显示索引 返回表索引信息。该格式类似于 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 语句扩展” 中所讨论的那样。

显示索引 返回以下字段:

  • 表的名称。

  • 非唯一

    如果索引不能包含重复值,则为 0,否则为 1。

  • 键名

    索引的名称。如果索引是主键,则名称始终为 PRIMARY

  • 序列号

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

  • 列名

    列的名称。另见 表达式 列的描述。

  • 排序

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

  • 基数

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

    基数 是基于存储为整数的统计信息计算的,因此即使对于小表,该值也不是精确的。基数越高,MySQL 在执行连接时使用索引的可能性越高。

  • 子部分

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

    Note

    前缀 限制 以字节为单位测量。然而,对于 CREATE TABLEALTER TABLECREATE INDEX 语句中的索引规范,前缀 长度 是以字符数为单位的非二进制字符串类型(CHARVARCHARTEXT)或以字节为单位的二进制字符串类型(BINARYVARBINARYBLOB)。在指定非二进制字符串列的前缀长度时,请注意这一点。

    有关索引前缀的更多信息,请参阅 第 10.3.5 节,“列索引”第 15.1.15 节,“CREATE INDEX 语句”

  • 打包

    指示键如何打包。NULL 如果它不是。

  • 包含 YES 如果列可以包含 NULL 值,否则为 ''

  • 索引类型

    索引方法使用(BTREEFULLTEXTHASHRTREE)。

  • 注释

    索引的信息未在其自己的列中描述,例如disabled如果索引被禁用。

  • 索引注释

    在创建索引时提供的任何注释,带有COMMENT属性。

  • 可见

    优化器是否可以看到索引。请参阅第 10.3.12 节,“不可见索引”

  • 表达式

    MySQL 支持函数键部分(请参阅函数键部分);这影响了Column_nameExpression列:

    • 对于非函数键部分,Column_name指示键部分索引的列,而ExpressionNULL

    • 对于函数键部分,Column_name列为NULL,而Expression指示键部分的表达式。

表索引的信息也可以从INFORMATION_SCHEMASTATISTICS表中获得。请参阅第 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 节,“生成的不可见主键”