13.7.5.22 SHOW INDEX 语句

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

SHOW INDEX返回 table 索引信息。格式类似于 ODBC 中SQLStatistics调用的格式。该语句要求对 table 中的任何列都具有一定的特权。

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:
*************************** 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:

tbl_name FROM db_name语法的替代方法是* db_name *。 * tbl_name *。这两个语句是等效的:

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

可以提供WHERE子句以使用更通用的条件选择行,如第 24.35 节,“ SHOW 语句的扩展”中所述。

SHOW INDEX返回以下字段:

  • Table

table 的名称。

  • Non_unique

如果索引不能包含重复项,则返回 0 ;如果可以,则返回 1.

  • Key_name

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

  • Seq_in_index

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

  • Column_name

列的名称。

  • Collation

列在索引中的排序方式。它可以具有值A(升序)或NULL(未排序)。

  • Cardinality

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

Cardinality是根据存储为整数的统计信息进行计数的,因此即使对于小型 table,该值也不一定准确。基数越高,MySQL 在进行联接时使用索引的机会越大。

  • Sub_part

索引前缀。也就是说,如果仅对列进行部分索引,则为已索引字符的数目;如果对整个列进行索引,则为NULL

Note

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

有关索引前缀的其他信息,请参见第 8.3.4 节“列索引”第 13.1.14 节“ CREATE INDEX 语句”

  • Packed

指示密钥的包装方式。 NULL,如果不是。

  • Null

如果该列可能包含NULL个值,则包含YES;否则,则包含''

  • Index_type

使用的索引方法(BTREEFULLTEXTHASHRTREE)。

  • Comment

关于索引的信息未在其自己的列中描述,例如disabled(如果禁用了索引)。

  • Index_comment

创建索引时,为索引提供的具有COMMENT属性的任何 Comments。

有关 table 索引的信息也可以从INFORMATION_SCHEMA STATISTICStable 中获得。参见第 24.24 节“ INFORMATION_SCHEMA STATISTICStable”

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