SHOW DATABASES 是什么
SHOW DATABASES 用来盘点一个实例里有哪些库,配合 SHOW TABLES、SHOW TABLE STATUS 可以继续看清库下有什么表、多大的表、多大索引、多少碎片。这几条命令本质是 information_schema 里元数据表的语法糖,而 information_schema 的统计值来自存储引擎的估算。8.0 把元数据收进了数据字典,SHOW 系列不再扫描数据目录,速度与一致性都比 5.7 明显更好。
基本信息
| 用途 | 库表清单与元数据盘点 |
|---|---|
| 常用命令 | SHOW DATABASES / SHOW TABLES / SHOW TABLE STATUS / SHOW INDEX |
| 元数据源 | information_schema.tables、statistics |
| 权限要求 | 对目标库有任意权限即可看到,全局权限可看全部 |
| 版本差异 | 8.0 元数据来自数据字典,5.7 为文件系统扫描 |
| 典型耗时 | 毫秒级,但 information_schema 上做 JOIN 会放大开销 |
典型使用场景
- 接手一台陌生实例:先列库、再分业务,避免把系统库当垃圾库清理
- 迁移前估算体量:按数据加索引的字节数判断走逻辑导出还是物理备份
- 排查表不见了的报错:确认是当前账号没权限,还是对象确实不存在
- 找出需要归档或重建的大表与碎片表,作为清理与优化清单
- 核对引擎与排序规则:把遗留的 MyISAM、utf8 老表挑出来做改造
- 统计表与分区数量,为 DDL 停机窗口和备份耗时做预估
常用查看
常用查看
SHOW DATABASES; # 只列出当前账号有权限的库
USE appdb; # 切换默认库,之后语句可省略库名前缀
SHOW TABLES LIKE 'order%'; # 按前缀模糊匹配表名
SHOW TABLE STATUS LIKE 'orders'\G # 单表详情,竖排输出看得清
SELECT DATABASE(); # 确认当前默认库,避免改错对象
SHOW FULL TABLES WHERE Table_type='VIEW'; # 只看视图,排查同名视图遮蔽表SHOW TABLE STATUS 读法
| 列 | 含义 | 判读要点 |
|---|---|---|
| Name | 表名 | 同名视图也会出现在这里,靠 Engine 区分 |
| Engine | 存储引擎 | 为空通常是视图;MyISAM 属历史遗留需改造 |
| Rows | InnoDB 的估算行数 | 偏差可达数十个百分点,精确值要用 COUNT(*) |
| Data_length | 数据文件占用字节 | 估算容量与导出大小的主要依据 |
| Index_length | 索引占用字节 | 长期大于数据量说明索引冗余或设计有问题 |
| Data_free | 表空间碎片字节 | 持续变大考虑重建表回收空间 |
| Collation | 排序规则 | 8.0 默认 utf8mb4_0900_ai_ci,混用会引发比较与连接问题 |
按容量排序找大表
按容量排序找大表
SELECT table_name, engine, table_rows,
ROUND((data_length+index_length)/1024/1024, 2) AS total_mb,
ROUND(data_free/1024/1024, 2) AS free_mb
FROM information_schema.tables
WHERE table_schema='appdb' AND table_type='BASE TABLE' # 排除视图
ORDER BY data_length+index_length DESC
LIMIT 20; # 大表清单,用于归档与优化排期SHOW DATABASES 只显示当前账号有权限的库,清单里少了某个库通常是被收窄了授权,而不是库被删了;用 SHOW GRANTS FOR CURRENT_USER() 就能核对到底哪些库还在授权范围内。
在 information_schema 上做全表 JOIN、GROUP BY 或大范围聚合,会触发元数据的大量读取,实例表数量上千时可能拖慢甚至阻塞其他会话的元数据操作,查询务必带上 table_schema 条件并限制返回行数。
不要凭 SHOW TABLES 看起来是空的就把库当成可清理对象:DROP DATABASE 不参与事务、无法回滚,执行前先确认备份可用并核对库名与字符集。
按库统计规模
按库统计规模
SELECT table_schema, COUNT(*) AS tables,
ROUND(SUM(data_length+index_length)/1024/1024, 2) AS total_mb # 该库的数据加索引总量
FROM information_schema.tables
WHERE table_type='BASE TABLE'
GROUP BY table_schema
ORDER BY total_mb DESC; # 按库排序,一眼看出谁是大户改结构或加索引之前,用 SHOW CREATE TABLE 与 SHOW INDEX 看清既有定义:能避免重复建索引、也能发现业务依赖的列,比只看表名清单可靠得多。