直接执行 SHOW INDEX 查索引比Navicat图形化界面更可靠,因其直查information_schema.STATISTICS,能准确显示动态添加、INVISIBLE等索引,并支持按需过滤、导出及生成DDL语句。
直接执行 SHOW INDEX 查索引比进“设计表→索引”更可靠
navicat 的图形化“索引”选项卡偶尔会漏显示部分索引(比如通过 alter table add index 动态加的,或 mysql 8.0+ 中用 invisible 属性创建的),而 show index 是直连 mysql server 查询 information_schema.statistics,结果最真实。尤其当你怀疑索引没生效、或需要核对联合索引字段顺序时,必须用这条命令。
实操建议:
- 在 Navicat 查询窗口中执行:
SHOW INDEX FROM `table_name`;(注意反引号包裹表名,避免关键字冲突) - 若跨库查,写全名:
SHOW INDEX FROM `db_name`.`table_name`; - 想过滤只看非主键索引?加 WHERE:
SELECT * FROM information_schema.STATISTICS WHERE table_schema = 'your_db' AND table_name = 'your_table' AND index_name != 'PRIMARY';
导出 SHOW INDEX 结果到 CSV/Excel 时中文列名不乱码的关键设置
导出后发现 Comment 列是空的、Index_comment 显示问号,大概率不是数据问题,而是 Navicat 连接层或导出环节字符集断层了。
必须检查并调整这两处:
- 连接属性 → “高级”页 → 勾选“使用 MySQL 字符集”,下拉框选
utf8mb4(不是utf8) - 导出向导最后一步 → “编码”选
UTF-8(明确排除UTF-8 with BOM;Excel 2016+ 能正确识别纯 UTF-8,BOM 反而可能被当作文本头导致首列错位) - 如果仍为空,先确认索引本身带注释:执行
SHOW CREATE TABLE `table_name`,看输出里KEY `idx_xxx` (`col`) COMMENT 'xxx'是否存在
导出的 CSV 里字段顺序混乱?这是 MySQL server 返回顺序,不是 Navicat bug
SHOW INDEX 返回的字段固定为 15 列(Table、Non_unique、Key_name…Index_comment),但 Navicat 导出 CSV 时默认按查询结果列顺序写入——这点没问题。真正容易踩坑的是:你误把 Seq_in_index 当成“索引定义顺序”,其实它只表示该字段在联合索引里的位置(1, 2, 3…),而 Column_name 才是实际字段名。
快速理清联合索引结构的方法:
- 导出后,在 Excel 里按
Key_name+Seq_in_index排序,同一索引名下的Column_name连起来就是定义顺序 - 不想手动整理?改用查询语句拼接:
SELECT GROUP_CONCAT(Column_name ORDER BY Seq_in_index SEPARATOR ', ') AS fields, Key_name FROM information_schema.STATISTICS WHERE table_name = 't' GROUP BY Key_name;
别用“转储 SQL 文件”代替索引导出——它根本不会生成 CREATE INDEX
有人右键数据库点“转储 SQL 文件”,以为能拿到所有索引 DDL,结果打开文件只看到 CREATE TABLE 语句里夹着几个 KEY 和 UNIQUE KEY。这不是遗漏,是 Navicat 故意为之:转储功能只保证建表语法可执行,不拆分索引为独立 CREATE INDEX 语句,也没法体现 ALGORITHM=INPLACE、COMMENT、VISIBLE 等细节。
真要生成可复用的索引语句,只有两个办法:
- 对每个索引单独右键 → “生成 SQL” → 选“创建索引”(在“设计表→索引”页操作,适合少量索引)
- 用
information_schema.STATISTICS拼 SQL:SELECT CONCAT('CREATE ', IF(Non_unique = 0, 'UNIQUE ', ''), 'INDEX `', Key_name, '` ON `', Table_name, '` (', GROUP_CONCAT(CONCAT('`', Column_name, '`') ORDER BY Seq_in_index), ');') AS ddl FROM ... GROUP BY Key_name;
字段顺序、前缀长度(Sub_part)、可见性(Index_comment 含 INVISIBLE 字样)这些细节,全藏在 SHOW INDEX 结果里,跳过这步就等于放弃关键信息。


















