TIDB_INDEXES
TIDB_INDEXES 记录了所有表中的 INDEX 信息。
1. USE information_schema;
2. DESC tidb_indexes;
1. +---------------+---------------+------+------+---------+-------+
2. | Field | Type | Null | Key | Default | Extra |
3. +---------------+---------------+------+------+---------+-------+
4. | TABLE_SCHEMA | varchar(64) | YES | | NULL | |
5. | TABLE_NAME | varchar(64) | YES | | NULL | |
6. | NON_UNIQUE | bigint(21) | YES | | NULL | |
7. | KEY_NAME | varchar(64) | YES | | NULL | |
8. | SEQ_IN_INDEX | bigint(21) | YES | | NULL | |
9. | COLUMN_NAME | varchar(64) | YES | | NULL | |
10. | SUB_PART | bigint(21) | YES | | NULL | |
11. | INDEX_COMMENT | varchar(2048) | YES | | NULL | |
12. | Expression | varchar(64) | YES | | NULL | |
13. | INDEX_ID | bigint(21) | YES | | NULL | |
14. | IS_VISIBLE | varchar(64) | YES | | NULL | |
15. | CLUSTERED | varchar(64) | YES | | NULL | |
16. +---------------+---------------+------+------+---------+-------+
17. 12 rows in set (0.00 sec)
INDEX_ID 是 TiDB 为每个索引分配的唯一 ID。它可以与从另一个表或 API 获得的 INDEX_ID 一起执行 join 操作。
例如,你可以在 SLOW_QUERY 表 中获取某些慢查询所涉及的 TABLE_ID 和 INDEX_ID,然后使用以下 SQL 语句获取特定索引信息:
1. SELECT
2. tidb_indexes.*
3. FROM
4. tidb_indexes,
5. tables
6. WHERE
7. tidb_indexes.table_schema = tables.table_schema
8. AND tidb_indexes.table_name = tidb_indexes.table_name
9. AND tables.tidb_table_id = ?
10. AND index_id = ?
TIDB_INDEXES 表中列的含义如下:
TABLE_SCHEMA:索引所在表的所属数据库的名称。TABLE_NAME:索引所在表的名称。NON_UNIQUE:如果索引是唯一的,则为0,否则为1。KEY_NAME:索引的名称。如果索引是主键,则名称为PRIMARY。SEQ_IN_INDEX:索引中列的顺序编号,从1开始。COLUMN_NAME:索引所在的列名。SUB_PART:索引前缀长度。如果列是部分被索引,则该值为被索引的字符数量,否则为NULL。INDEX_COMMENT:创建索引时以COMMENT标注的注释。INDEX_ID:索引的 ID。IS_VISIBLE:索引是否可见。CLUSTERED:是否为聚簇索引。
