Mysql 元数据
Mysql元数据
概念
数据库是数据的结构化集合。元数据是“有关数据的数据”,除了表之外的都是元数据,都是基表,比如库表属性、状态信息、权限等。
information_schema库
infromation_schema库中的表,保存的是Mysql的元数据,是一个虚拟数据库,物理上并不存在相关的目录和文件。该库中包含的元数据表如下。
- CHARACTER_SETS:保存所有Mysql可用的字符集。相当于命令
SHOW CHARACTER SET
SELECT * from information_schema.CHARACTER_SETS #查看Mysql可用的字符集
- COLUMNS:保存的是所有数据库的列信息
SELECT * from information_schema.`COLUMNS` #查看所有数据库的列信息
- REFERENTIAL_CONSTRAINTS
SELECT * from information_schema.REFERENTIAL_CONSTRAINTS #查看数据库中的所有外键信息
- SHEMATA
SELECT * from information_schema.SCHEMATA #查看所有的数据库
- STATISTICS
SELECT * from information_schema.STATISTICS #查看所有的索引
- TABLES
SELECT * from information_schema.`TABLES` #查看所有的数据库中的表信息
TABLE_SCHEMA # 表所在的库 (库的名字)
TABLE_NAME # 表名 (表的名字)
ENGINE # 引擎
TABLE_ROWS # 表的行数
AVG_ROW_LENGTH # 平均行长度 (行的长度)
INDEX_LENGTH # 索引长度 (表的大小为 行数*长度+索引长度)
TABLE_COMMENT # 表的注释
columns # 表的所有信息
实际应用
统计库里表的个数
SELECT
table_schema,
count(table_name)
FROM
information_schema. TABLES
GROUP BY
TABLE_SCHEMA
统计所有非系统表
SELECT
table_schema,
table_name,
ENGINE
FROM
information_schema.`TABLES`
WHERE
table_schema NOT IN (
'mysql',
'information_schema',
'performance_schema'
)
统计每个库总的数据量
数据量计算,表的行数乘以行的长度
SELECT table_schema,SUM(table_rows * AVG_ROW_LENGTH + INDEX_LENGTH)/1024/1024 AS "total_mb"
FROM information_schema.tables
WHERE table_schema NOT IN ('sys','information_schema','mysql','performance_schema')
GROUP BY table_schema
ORDER BY total_mb DESC;