Navicat 博客

2019 年 4 月 30 日,由 Robert Gravelle 撰写

在关系数据库中,数据库的元数据(例如有关 MySQL 服务器的信息、数据库或表的名、列的数据类型或访问权限)存储在数据字典和/或系统目录中。MySQL 在名为 INFORMATION_SCHEMA 的特殊模式中提供数据库的元数据。每个 MySQL 实例都有一个INFORMATION_SCHEMA 模式。它包含几个只读表,你可以查询这些表以获取你想要的信息。在今天的文章中,我们将使用 Navicat Premium 探讨 INFORMATION_SCHEMA 的一些实际用途。

获取表的信息

information_schema.tables 表包含有关表的元数据。除了表名,你还可以检索其类型(基表或视图)和引擎:

SELECT table_name, table_type, engine
FROM information_schema.tables
WHERE table_schema = 'sakila'
ORDER BY table_name;

以下是在 Navicat 运行上述查询的结果:

你还可以查询 information_schema.tables 以获取表的大小:

SELECT
    table_name AS `Table`,
    round(((data_length + index_length) / 1024 / 1024), 2) `Size in MB`
FROM information_schema.TABLES
WHERE table_schema = "sakila"
AND table_name = "film";

以下是 Navicat Premium 的结果:

你可以稍作调整以列出每个数据库中每个表的大小:

SELECT
     table_schema as `Database`,
     table_name AS `Table`,
     round(((data_length + index_length) / 1024 / 1024), 2) `Size in MB`
FROM information_schema.TABLES
ORDER BY (data_length + index_length) DESC;

你甚至可以使用 information_schema.tables 列出 MySQL 实例中每个数据库的大小!

SELECT
     table_schema as `Database`,
     table_name AS `Table`,
     round(((data_length + index_length) / 1024 / 1024), 2) `Size in MB`
FROM information_schema.TABLES
ORDER BY (data_length + index_length) DESC;

查看表的统计信息

INFORMATION_SCHEMA.STATISTICS 表包含缓存的值。因此,默认情况下,它们会在 24 小时后过期。如果没有缓存的统计信息或统计信息已过期,则在查询表统计信息列时会从存储引擎中检索统计信息。

INFORMATION_SCHEMA.STATISTICS 表的其中一个用途是查看特定模式中所有表的索引:

SELECT DISTINCT
    TABLE_NAME,
    INDEX_NAME
FROM INFORMATION_SCHEMA.STATISTICS
WHERE TABLE_SCHEMA = 'your_schema';

以下是 Navicat 中 sakila 数据库的结果:

只需删除 WHERE 子句,即可查看所有模式中的全部索引。在这种情况下,你可能还想添加数据库名:

SELECT DISTINCT
    stat.TABLE_SCHEMA as 'DATABASE',
    TABLE_NAME,
    INDEX_NAME
FROM INFORMATION_SCHEMA.STATISTICS stat;

总结

在本篇文章中,我们了解了使用 MySQL INFORMATION_SCHEMA 获取有关 MySQL 实例中各种对象(数据库、表、列、索引等)的元数据信息。虽然我们是在 Navicat Premium 中运行查询,但使用 Navicat for MySQL 是一样的!两者都有提供 14 天免费试用期,立即亲自尝试一下!

Navicat 文章
频道条目
分享
文章归档