從適合小型應用程序的適度的幾兆字節數據庫到旨在處理廣泛的企業級數據的數 TB 的龐然大物 – MySQL 數據庫 顯示各種大小。數據庫的大小不僅取決于其存儲的數據量,還取決于數據類型,例如文本數據、數值數據、blob 等。
在每個數據庫中,您會發現多個表。有些可能是小型查找表,有助于更快地檢索數據并支持數據庫規范化。其他可能是包含數百萬條記錄的巨大表,在日常操作中大量使用并且是業務流程的核心。這些表的大小受到列數、每列的數據類型和總行數等因素的影響。
索引指向表中的數據,提高檢索速度。但是,它們也會顯著影響數據庫的存儲占用空間。例如,由于維護這些索引帶來了額外的開銷,索引較多的表可能會占用比實際數據建議的更多的空間。
在本文中,我們將引導您完成一系列 SQL 命令,這些命令允許您直接使用 MySQL 命令行界面檢查數據庫、表和索引的大小。如果您更喜歡使用 SQL 命令而不是 MySQL Workbench 或 phpMyAdmin 等圖形工具,那么本指南特別有用。
檢查MySQL數據目錄的磁盤使用情況
在深入研究特定數據庫和表大小之前,了解 MySQL 數據目錄的總體磁盤使用情況會很有幫助。此信息通常需要訪問服務器,并且無法通過 SQL 命令獲取。您需要在 Linux 中使用像 du 這樣的系統命令:
Linux命令顯示MySQL數據目錄有多少磁盤空間
du -sh /var/lib/mysql
登錄后復制
此命令顯示 MySQL 數據目錄(通常位于 /var/lib/mysql)占用了多少磁盤空間。此信息對于有效管理服務器資源和規劃任何必要的擴展或優化至關重要。
如何檢查特定數據庫的大小
出于各種原因,了解特定 MySQL 數據庫的大小非常重要。您可能需要跟蹤其增長、準備備份或確保其保持在環境的存儲限制內。當您規劃未來的容量需求或將數據庫遷移到新服務器時,此信息變得特別有價值。
要準確確定特定 MySQL 數據庫的大小,請使用以下 SQL 查詢:
用于確定特定 MySQL 數據庫大小的 SQL 命令
選擇 table_schema 作為“數據庫”, ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS "大小 (MB)" 來自 information_schema.tables WHERE table_schema = 'your_database_name' 按表模式分組;
登錄后復制
將 ‘your_database_name’ 替換為您的數據庫名稱。此查詢匯總數據庫中所有表的數據和索引大小,提供以兆字節為單位的總大小。
如何檢查所有數據庫的大小
無論是確保數據庫不會意外變大、管理存儲容量還是執行定期運行狀況檢查 – 了解每個數據庫的大小都可以為您的服務器的整體利用率提供有價值的見解。
要檢索 MySQL 服務器上每個數據庫的大小,請使用以下 SQL 查詢:
用于檢索 MySQL 服務器上每個數據庫的大小的 SQL 命令
選擇 table_schema 作為“數據庫”, ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS "大小 (MB)" 來自 information_schema.tables 按表模式分組;
登錄后復制
此 SQL 命令從 information_schema.tables 表收集數據,該表包含有關所有數據庫中所有表的元數據。 table_schema列代表數據庫名稱,而data_length和index_length分別代表表數據和索引的大小。
它將每個數據庫中所有表的 data_length 和 index_length 相加,為每個表提供全面的總計。然后將總和從字節轉換為兆字節 (MB),以便于解釋。
檢查表大小
大表會降低查詢性能。檢查表大小可以幫助您確定優化的候選對象,例如索引和分區。這些表可能還需要更多時間來執行備份和恢復等維護任務。尺寸信息可讓您更有效地規劃這些操作。
要檢查數據庫中特定表的大小,您可以運行:
用于檢查數據庫中特定表的大小的 SQL 命令
選擇 TABLE_NAME 作為“表”, ROUND(((data_length + index_length) / 1024 / 1024), 2) AS "大小 (MB)" 來自 information_schema.tables WHERE table_schema = 'your_database_name' AND TABLE_NAME = 'your_table_name';
登錄后復制
將 ‘your_database_name’ 和 ‘your_table_name’ 替換為您的特定數據庫和表名稱。該查詢通過對data_length(表數據使用的空間)和index_length(表索引使用的空間)求和來計算表的總大小。然后將結果從字節轉換為兆字節以提高可讀性。
如何列出所有數據庫中的所有表大小
在 MySQL 中,通常需要全面了解所有數據庫中所有表的大小,特別是對于系統范圍的性能分析、存儲優化和監控一般數據增長。這種概述可以幫助您快速識別哪些表消耗了最多的存儲空間,并且可能需要干預或重新配置。
要列出所有數據庫中所有表的大小,可以使用以下 SQL 查詢:
用于列出所有數據庫中所有表的大小的 SQL 命令
選擇 table_schema 作為“數據庫”, TABLE_NAME AS“表”, ROUND(((data_length + index_length) / 1024 / 1024), 2) AS "大小 (MB)" 來自 information_schema.tables ORDER BY 數據長度 + 索引長度 DESC;
登錄后復制
查詢選擇table_schema(數據庫名稱)和table_name,以及data_length(實際數據存儲)和index_length(索引存儲)的總和。結果按數據和索引長度的組合大小降序排列,首先顯示最大的表。這種優先順序可以幫助您輕松發現最大的空間消耗者。
檢查索引大小
每當添加、刪除或更改索引時,最好檢查它們的大小以了解它們對存儲和性能的影響。定期檢查索引大小應該是定期數據庫維護的一部分 – 特別是對于具有大量讀取操作的數據庫。
要具體檢查表的索引大小,可以修改 SQL 查詢以關注索引長度:
專門檢查表索引大小的SQL命令
選擇 TABLE_NAME 作為“表”, ROUND((index_length / 1024 / 1024), 2) AS "索引大小 (MB)" 來自 information_schema.tables WHERE table_schema = 'your_database_name' AND TABLE_NAME = 'your_table_name';
登錄后復制
將 ‘your_database_name’ 和 ‘your_table_name’ 替換為您的特定數據庫和表名稱。
這顯示了特定表的索引的大小,幫助您了解索引在實際數據存儲之外使用的額外空間。