文档首页
MySQL 9.0 参考手册
相关文档 下载本手册

MySQL 9.0 参考手册  /  ...  /  SHOW INDEX 语句

15.7.7.23 SHOW INDEX 语句

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

可以使用 db_name.tbl_name 代替 tbl_name FROM db_name 语法。这两个语句等效

SHOW INDEX FROM mytable FROM mydb;
SHOW INDEX FROM mydb.mytable;

可选的 EXTENDED 关键字会导致输出包含有关 MySQL 内部使用但用户无法访问的隐藏索引的信息。

可以在 Section 28.8, “SHOW 语句扩展” 中找到关于使用更一般的条件来选择行的 WHERE 子句的讨论。

SHOW INDEX 返回以下字段

  • 表的名称。

  • Non_unique

    如果索引不能包含重复项,则为 0;如果可以包含重复项,则为 1。

  • Key_name

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

  • Seq_in_index

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

  • Column_name

    列名。另请参见 Expression 列的描述。

  • Collation

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

  • 基数

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

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

  • 子部分

    索引前缀。也就是说,如果列仅部分索引,则为索引字符数,如果整个列都被索引,则为 NULL

    注意

    前缀 限制 以字节为单位。但是,CREATE TABLEALTER TABLECREATE INDEX 语句中索引规范的前缀 长度 被解释为非二进制字符串类型的字符数 (CHARVARCHARTEXT) 和二进制字符串类型的字节数 (BINARYVARBINARYBLOB)。在为使用多字节字符集的非二进制字符串列指定前缀长度时,请考虑这一点。

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

  • 打包

    指示键的打包方式。如果未打包,则为 NULL

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

  • 索引类型

    使用的索引方法 (BTREEFULLTEXTHASHRTREE)。

  • 注释

    有关索引的信息,这些信息没有在其自身列中描述,例如,如果索引被禁用,则为 disabled

  • 索引注释

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

  • 可见

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

  • 表达式

    MySQL 支持函数键部分(参见 函数键部分);这会影响 Column_nameExpression 列。

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

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

有关表索引的信息也可以从 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 节,“生成不可见主键”