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_SCHEMA
PARTITIONS
資料表,如本範例所示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_TABLESPACES
ENCRYPTION
欄。當在停用嚴格模式的情況下建立資料表時,如果指定的資料列格式不受支援,則會使用儲存引擎的預設資料列格式。資料表的實際資料列格式會在
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 資料表」。