首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 讀取指定庫下所有表名、行數、大小:information_schema 實用查詢

     編輯:MySQL 資料庫相關知識

前言:information_schema 是元數據查詢的標準入口

需要列出某庫所有表、統計行數、估算大小、引擎、編碼、建表時間等元數據,直接查 information_schema.TABLES 即可,無需解析 SHOW TABLE STATUS 輸出。本文提供實用查詢模板與 PHP 代碼示例。

核心查詢 SQL

SELECT
    TABLE_NAME,
    TABLE_ROWS,
    DATA_LENGTH,
    INDEX_LENGTH,
    DATA_LENGTH + INDEX_LENGTH AS total_size_bytes,
    ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024, 2) AS total_size_mb,
    ENGINE,
    TABLE_COLLATION,
    CREATE_TIME,
    UPDATE_TIME,
    TABLE_COMMENT
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'your_database_name'
  AND TABLE_TYPE = 'BASE TABLE'
ORDER BY TABLE_ROWS DESC;

欄位含義速查

欄位含義備註
TABLE_NAME表名
TABLE_ROWS預估行數InnoDB 為掃描統計,**非精確值**,精確需 SELECT COUNT(*)
DATA_LENGTH資料大小(位元組)聚簇索引大小
INDEX_LENGTH索引大小(位元組)二級索引大小
ENGINE存儲引擎InnoDB, MyISAM 等
TABLE_COLLATION表級編碼排序規則如 utf8mb4_general_ci
CREATE_TIME建表時間
UPDATE_TIME最後更新時間InnoDB 不更新,僅 MyISAM 準確
TABLE_COMMENT表註釋

PHP 代碼示例(PDO)

<?php
$pdo = new PDO('mysql:host=127.0.0.1;dbname=information_schema;charset=utf8', 'user', 'pass');
$sql = "SELECT TABLE_NAME, TABLE_ROWS, DATA_LENGTH, INDEX_LENGTH, ENGINE, TABLE_COLLATION, CREATE_TIME
        FROM TABLES
        WHERE TABLE_SCHEMA = ? AND TABLE_TYPE = 'BASE TABLE'
        ORDER BY TABLE_ROWS DESC";
$stmt = $pdo->prepare($sql);
$stmt->execute(['ecshop']);
$tables = $stmt->fetchAll(PDO::FETCH_ASSOC);

foreach ($tables as $t) {
    $sizeMb = round(($t['DATA_LENGTH'] + $t['INDEX_LENGTH']) / 1024 / 1024, 2);
    echo "{$t['TABLE_NAME']} - Rows: {$t['TABLE_ROWS']} - Size: {$sizeMb} MB - Engine: {$t['ENGINE']}
"; } ?>

進階:按大小降序、過濾大表

-- 找出超過 100MB 的表
SELECT TABLE_NAME, ROUND((DATA_LENGTH+INDEX_LENGTH)/1024/1024,2) AS size_mb
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'your_db' AND TABLE_TYPE = 'BASE TABLE'
  AND (DATA_LENGTH + INDEX_LENGTH) > 100*1024*1024
ORDER BY size_mb DESC;

注意事項

  • TABLE_ROWS 對 InnoDB **不準確**,僅供參考;精確行數必須 SELECT COUNT(*)(會掃描聚簇索引,大表慎用)。
  • DATA_LENGTH、INDEX_LENGTH 為邏輯大小,**不含碎片、壓縮後大小**;實際磁碟佔用參考 information_schema.INNODB_SYS_TABLESPACES 或檔案系統 du。
  • 查詢 information_schema 在表極多(>10萬)時可能較慢,建議緩存結果或定時同步至元數據表。

善用 information_schema,讓 Schema 巡檢、容量規劃、清理無用表變成幾條 SQL 的事兒。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved