SHOW TABLE STATUS
[{FROM | IN} db_name]
[LIKE 'pattern' | WHERE expr]
SHOW TABLE STATUS 的運作方式類似於 SHOW TABLES,但會提供每個非 TEMPORARY 資料表的許多資訊。您也可以使用 mysqlshow --status db_name 命令取得此列表。LIKE 子句 (如果存在) 表示要比對的資料表名稱。WHERE 子句可以用來使用更一般的條件選取列,如第 28.8 節「擴充 SHOW 陳述式」中所述。
此陳述式也會顯示有關檢視表的資訊。
SHOW TABLE STATUS 輸出包含以下欄位
名稱資料表的名稱。
引擎資料表的儲存引擎。請參閱第 17 章,InnoDB 儲存引擎和第 18 章,替代的儲存引擎。
對於分割資料表,
Engine會顯示所有分割區所使用的儲存引擎名稱。版本此欄未使用。在 MySQL 8.0 中移除
.frm檔案後,此欄現在會回報硬編碼的值10,這是 MySQL 5.7 中使用的最後一個.frm檔案版本。Row_format資料列儲存格式 (
Fixed、Dynamic、Compressed、Redundant、Compact)。對於MyISAM資料表,Dynamic對應於 myisamchk -dvv 回報的Packed。Rows資料列的數量。某些儲存引擎(例如
MyISAM)會儲存精確的計數。對於其他儲存引擎(例如InnoDB),此值是近似值,可能與實際值相差 40% 到 50%。在這種情況下,請使用SELECT COUNT(*)來取得精確的計數。對於
INFORMATION_SCHEMA資料表,Rows值為NULL。對於
InnoDB資料表,資料列計數僅是 SQL 優化中使用的粗略估計值。(如果InnoDB資料表已分割,情況也是如此。)Avg_row_length平均資料列長度。
Data_length對於
MyISAM,Data_length是資料檔案的長度,以位元組為單位。對於
InnoDB,Data_length是為叢集索引配置的大約空間量,以位元組為單位。具體而言,它是叢集索引的大小(以頁面為單位)乘以InnoDB頁面大小。有關其他儲存引擎的資訊,請參閱本節末尾的注意事項。
Max_data_length對於
MyISAM,Max_data_length是資料檔案的最大長度。這是資料表可以儲存的資料總位元組數,以所使用的資料指標大小為準。未用於
InnoDB。有關其他儲存引擎的資訊,請參閱本節末尾的注意事項。
Index_length對於
MyISAM,Index_length是索引檔案的長度,以位元組為單位。對於
InnoDB,Index_length是為非叢集索引配置的大約空間量,以位元組為單位。具體而言,它是非叢集索引大小的總和(以頁面為單位)乘以InnoDB頁面大小。有關其他儲存引擎的資訊,請參閱本節末尾的注意事項。
Data_free已配置但未使用的位元組數。
InnoDB資料表會回報資料表所屬的表空間的可用空間。對於位於共用表空間中的資料表,這是共用表空間的可用空間。如果您使用多個表空間,且資料表有自己的表空間,則可用空間僅適用於該資料表。可用空間是指完全可用的擴展區中的位元組數減去安全邊際。即使可用空間顯示為 0,只要不需要配置新的擴展區,仍有可能插入資料列。對於 NDB Cluster,
Data_free會顯示磁碟上為磁碟資料資料表或磁碟上的片段配置但未使用的空間。(記憶體內資料資源使用情況由Data_length欄回報。)對於分割資料表,此值僅為估計值,可能不完全正確。在這種情況下,更精確的取得此資訊的方法是查詢
INFORMATION_SCHEMAPARTITIONS資料表,如本範例所示SELECT SUM(DATA_FREE) FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA = 'mydb' AND TABLE_NAME = 'mytable';Auto_increment下一個
AUTO_INCREMENT值。Create_time資料表建立的時間。
Update_time上次更新資料檔案的時間。對於某些儲存引擎,此值為
NULL。例如,InnoDB會在其系統表空間中儲存多個資料表,且資料檔案時間戳記不適用。即使在每個資料表檔案模式下,每個InnoDB資料表都位於單獨的.ibd檔案中,變更緩衝也可能會延遲寫入資料檔案,因此檔案修改時間與上次插入、更新或刪除的時間不同。對於MyISAM,使用資料檔案時間戳記;但是,在 Windows 上,時間戳記不會因更新而更新,因此該值不準確。Update_time會顯示在未分割的InnoDB資料表上執行的最後一次UPDATE、INSERT或DELETE的時間戳記值。對於 MVCC,時間戳記值反映COMMIT時間,該時間被視為最後一次更新時間。當伺服器重新啟動或資料表從InnoDB資料字典快取中移除時,時間戳記不會保留。Check_time上次檢查資料表的時間。並非所有儲存引擎都會更新此時間,在這種情況下,該值始終為
NULL。對於分割的
InnoDB資料表,Check_time始終為NULL。Collation資料表的預設定序。輸出不會明確列出資料表的預設字元集,但定序名稱會以字元集名稱開頭。
Checksum即時檢查總和值(如果有的話)。
Create_options與
CREATE TABLE一起使用的額外選項。對於分割資料表,
Create_options會顯示partitioned。如果資料表已加密,或指定的加密方式與結構描述加密不同,則
Create_options會顯示每個資料表檔案表空間的ENCRYPTION子句。加密子句不會顯示在一般表空間中建立的資料表。若要識別已加密的每個資料表檔案和一般表空間,請查詢INNODB_TABLESPACESENCRYPTION欄。當在停用嚴格模式的情況下建立資料表時,如果指定的資料列格式不受支援,則會使用儲存引擎的預設資料列格式。資料表的實際資料列格式會在
Row_format欄中回報。Create_options會顯示在CREATE TABLE陳述式中指定的資料列格式。變更資料表的儲存引擎時,不適用於新儲存引擎的資料表選項會保留在資料表定義中,以便在必要時將資料表還原為具有先前定義選項的原始儲存引擎。
Create_options可能會顯示保留的選項。Comment建立資料表時使用的註解(或有關 MySQL 無法存取資料表資訊的原因)。
注意事項
對於
InnoDB資料表,SHOW TABLE STATUS除了資料表保留的實體大小外,不會提供精確的統計資料。資料列計數僅是 SQL 優化中使用的粗略估計值。對於
NDB資料表,此陳述式的輸出會顯示Avg_row_length和Data_length欄的適當值,但BLOB欄除外。對於
NDB資料表,Data_length僅包含儲存在主記憶體中的資料;Max_data_length和Data_free欄適用於磁碟資料。對於 NDB Cluster 磁碟資料資料表,
Max_data_length會顯示為磁碟資料資料表或片段的磁碟部分配置的空間。(記憶體內資料資源使用情況由Data_length欄回報。)對於
MEMORY資料表,Data_length、Max_data_length和Index_length值會近似實際配置的記憶體量。配置演算法會保留大量記憶體,以減少配置操作的次數。對於檢視表,
SHOW TABLE STATUS顯示的大多數欄為 0 或NULL,但Name表示檢視表名稱、Create_time表示建立時間,而Comment則表示VIEW。
資料表資訊也可從 INFORMATION_SCHEMA TABLES 資料表取得。請參閱第 28.3.38 節,「INFORMATION_SCHEMA TABLES 資料表」。