在關聯式資料庫中,資料庫的中繼資料(例如有關 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 天免費試用期,立即親自嘗試一下!