首页/数据/数据库速查/SHOW / information_schema 元数据联动
SQL 语法52 条

SHOW / information_schema 元数据联动

除了 SHOW 命令,大量结构信息可直接查 information_schema:列、索引、约束、表大小、字符集,一网打尽。

数据库速查数据更新于 2026-10-13

SHOW 与 information_schema 是什么

MySQL 的表、列、索引、约束、字符集、表大小这些结构信息有两种读法:SHOW 系列命令(SHOW TABLES、SHOW CREATE TABLE、SHOW INDEX)写法短,适合人看;information_schema 是一组标准视图,可以用 WHERE、JOIN、聚合随意筛选,适合脚本与批量审计。两者读的是同一份元数据,8.0 之后 information_schema 直接读数据字典,性能和一致性都明显好于 5.7。

基本信息

适用版本MySQL 5.7 / 8.0(8.0 的 information_schema 性能大幅提升)
常用视图TABLES / COLUMNS / STATISTICS / KEY_COLUMN_USAGE / TABLE_CONSTRAINTS
快捷命令SHOW TABLES、SHOW CREATE TABLE、SHOW INDEX FROM t
权限要求只能看到自己有权访问的对象
开销提醒大实例全量扫描有代价,避开业务高峰

典型使用场景

  • 盘点某库所有表与注释,导出成数据字典文档
  • 审计索引:找出没有索引、索引列顺序可疑、索引重复的表
  • 核对字段类型与字符集:迁移或跨库同步前的差异比对
  • 统计表体积:按数据量排序,找出需要归档或分表的大表
  • 发布前检查:确认某个字段、某个索引是否已经在生产环境存在

常用查询

常用查询
-- 列出库内所有基础表及其注释
SELECT table_name, engine, table_comment
FROM information_schema.tables
WHERE table_schema = 'appdb' AND table_type = 'BASE TABLE';

-- 按索引名聚合出每个索引的列顺序
SELECT index_name, GROUP_CONCAT(column_name ORDER BY seq_in_index) AS cols
FROM information_schema.statistics
WHERE table_schema = 'appdb' AND table_name = 'orders'
GROUP BY index_name;

-- 查看建表语句原文
SHOW CREATE TABLE appdb.orders\G

表体积与字段核对

表体积与字段核对
-- 估算体积排序(table_rows 为估算值)
SELECT table_name, table_rows, ROUND((data_length + index_length) / 1024 / 1024) AS mb
FROM information_schema.tables
WHERE table_schema = 'appdb'
ORDER BY data_length DESC LIMIT 10;

-- 核对某字段的完整定义
SELECT column_name, column_type, is_nullable, column_default
FROM information_schema.columns
WHERE table_schema = 'appdb' AND table_name = 'orders' AND column_name = 'status';

常用视图对照

视图内容典型用途
TABLES表名、引擎、行数估算、注释表清单与体积盘点
COLUMNS字段类型、可空、默认值、字符集结构比对与文档生成
STATISTICS索引与列的对应关系、基数索引审计、判断联合索引列序
KEY_COLUMN_USAGE主键与外键列约束梳理与依赖分析
TABLE_CONSTRAINTS约束类型与名称发布前核对唯一键是否存在
table_rows 来自统计信息,是估算值,用来观察容量趋势没问题,用来做账务核对一定会出错;需要精确行数只能 COUNT(*),或让应用侧维护计数表。
在业务高峰对 information_schema 做全库聚合可能持有元数据锁并长时间占用资源,脚本应加上 table_schema 与 table_name 限定条件,必要时放到从库或低峰执行。

易错点

  • 把 table_rows 当准确行数写进报表:数据偏差可达数十个百分点,结论直接失效
  • 不加库名条件就查 information_schema:实例上库多表多时全量扫描,慢查询拖垮实例
  • 依赖 mysql 系统表列名写脚本:5.7 与 8.0 结构差异大,升级即报错,应改用 information_schema 或 sys
  • 在发布窗口用 SHOW CREATE TABLE 人工比对:文本格式差异大,容易漏掉索引或默认值变化
  • 忘记权限过滤:低权限账号看到的对象不全,误以为表被删了

数据来源与参考

  • MySQL 8.0 Reference Manual: The INFORMATION_SCHEMA Database

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌