要查看mysql表中所有索引的详细信息,最直接的方法是使用show index from table_name;或查询information_schema.statistics表。前者适用于快速查看特定表的索引,返回结果包含索引名、类型、列名、唯一性等信息;后者适合跨库查询或复杂筛选,可通过sql条件过滤获取指定数据库或表的索引详情,并能结合表的存储引擎、行数等上下文信息进行分析。两种方法均能准确展示索引结构,其中show index输出直观,而information_schema方式更灵活,适用于自动化管理和性能优化场景,完整支持对btree、hash、fulltext、spatial等索引类型的识别与分析,且可扩展用于数据库审计、索引效率评估等任务,最终实现对索引全面掌控的目的。

要获取MySQL表的索引列表和索引类型,最直接的方式就是使用
SHOW INDEX FROM table_name;
SHOW KEYS FROM table_name;
INFORMATION_SCHEMA.STATISTICS
查看MySQL表索引的详细信息,通常我会用到两种主要方法,它们各有侧重,但都能清晰地展示索引结构和类型。
方法一:使用 SHOW INDEX
SHOW KEYS
这是最常用也最直观的方式,尤其适合快速查看某个特定表的索引情况。
SHOW INDEX FROM your_table_name; -- 或者 SHOW KEYS FROM your_table_name;
将
your_table_name
方法二:查询 INFORMATION_SCHEMA.STATISTICS
INFORMATION_SCHEMA
STATISTICS
SELECT
TABLE_SCHEMA,
TABLE_NAME,
INDEX_NAME,
SEQ_IN_INDEX,
COLUMN_NAME,
COLLATION,
CARDINALITY,
SUB_PART,
PACKED,
`NULL`,
INDEX_TYPE,
COMMENT,
INDEX_COMMENT
FROM
INFORMATION_SCHEMA.STATISTICS
WHERE
TABLE_SCHEMA = 'your_database_name'
AND TABLE_NAME = 'your_table_name'
ORDER BY
TABLE_SCHEMA, TABLE_NAME, INDEX_NAME, SEQ_IN_INDEX;这里你需要将
your_database_name
your_table_name
WHERE
当我们执行
SHOW INDEX FROM your_table_name;
以下是这些列的常见含义:
PRIMARY
A
D
NULL
A
NULL
NULL
NULL
YES
NO
BTREE
HASH
FULLTEXT
SPATIAL
举个例子,假设我们有一个
users
id
username
bio
SHOW INDEX FROM users;
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Cardinality | Index_type |
|---|---|---|---|---|---|---|
| users | 0 | PRIMARY | 1 | id | 10000 | BTREE |
| users | 0 | username | 1 | username | 10000 | BTREE |
| users | 1 | idx_email | 1 | 9000 | BTREE | |
| users | 1 | ft_bio | 1 | bio | 5000 | FULLTEXT |
从这里,我们能清晰地看到
id
username
Non_unique
idx_email
Non_unique
BTREE
ft_bio
FULLTEXT
SHOW INDEX
Index_type
BTREE (B-Tree)
WHERE column = 'value'
WHERE column BETWEEN 'val1' AND 'val2'
WHERE column > 'value'
ORDER BY column
WHERE column LIKE 'prefix%'
HASH (哈希索引)
WHERE column = 'value'
>
<
LIKE
MEMORY
FULLTEXT (全文索引)
MATCH AGAINST
SPATIAL (空间索引)
GEOMETRY
POINT
LINESTRING
POLYGON
NULL
除了这些
Index_type
NULL
NULL
NULL
这些逻辑类型通常都是基于
BTREE
Non_unique
Key_name
INFORMATION_SCHEMA.STATISTICS
前面已经给出了一个基本的查询示例,这里我们再深入一下,看看如何利用它来解决更复杂的需求:
SELECT
s.TABLE_SCHEMA AS DatabaseName,
s.TABLE_NAME AS TableName,
s.INDEX_NAME AS IndexName,
s.SEQ_IN_INDEX AS ColumnSequence,
s.COLUMN_NAME AS ColumnName,
s.COLLATION AS SortOrder,
s.CARDINALITY AS EstimatedUniqueValues,
s.SUB_PART AS PrefixLength,
s.`NULL` AS IsNullable,
s.INDEX_TYPE AS IndexType,
s.COMMENT AS IndexComment,
t.ENGINE AS StorageEngine,
t.TABLE_ROWS AS TableRows
FROM
INFORMATION_SCHEMA.STATISTICS s
JOIN
INFORMATION_SCHEMA.TABLES t ON s.TABLE_SCHEMA = t.TABLE_SCHEMA AND s.TABLE_NAME = t.TABLE_NAME
WHERE
s.TABLE_SCHEMA NOT IN ('mysql', 'information_schema', 'performance_schema', 'sys') -- 排除系统数据库
-- AND s.TABLE_SCHEMA = 'your_specific_database' -- 如果只想查特定库
-- AND s.INDEX_TYPE = 'FULLTEXT' -- 查找所有全文索引
-- AND s.CARDINALITY < 1000 -- 查找基数较低的索引,可能效率不高
ORDER BY
s.TABLE_SCHEMA, s.TABLE_NAME, s.INDEX_NAME, s.SEQ_IN_INDEX;这个查询的亮点在于:
WHERE s.TABLE_SCHEMA = 'your_specific_database'
JOIN INFORMATION_SCHEMA.TABLES t
t.ENGINE
t.TABLE_ROWS
s.TABLE_SCHEMA NOT IN (...)
s.INDEX_TYPE = 'FULLTEXT'
s.CARDINALITY < 1000
使用场景:
说实话,
INFORMATION_SCHEMA
SHOW INDEX
以上就是mysql获取表的索引列表语句 mysql获取表的索引类型列表教程的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号