TABLES
表格提供關於資料庫中表格的資訊。
TABLES
中代表表格統計資料的欄位會保存快取值。information_schema_stats_expiry
系統變數定義快取的表格統計資料過期前的時間長度。預設值為 86400 秒(24 小時)。如果沒有快取的統計資料或統計資料已過期,則在查詢表格統計資料欄位時,會從儲存引擎擷取統計資料。若要隨時更新指定表格的快取值,請使用 ANALYZE TABLE
。若要始終直接從儲存引擎擷取最新的統計資料,請將 information_schema_stats_expiry
設定為 0
。如需更多資訊,請參閱 第 10.2.3 節,〈最佳化 INFORMATION_SCHEMA 查詢〉。
如果啟用了 innodb_read_only
系統變數,ANALYZE TABLE
可能會失敗,因為它無法更新使用 InnoDB
的資料字典中的統計資料表格。對於更新索引鍵分佈的 ANALYZE TABLE
作業,即使該作業更新表格本身(例如,如果它是 MyISAM
表格),也可能會發生失敗。若要取得更新的分佈統計資料,請設定 information_schema_stats_expiry=0
。
TABLES
表格具有下列欄位
TABLE_CATALOG
表格所屬的目錄名稱。此值始終為
def
。TABLE_SCHEMA
表格所屬的綱要(資料庫)名稱。
TABLE_NAME
表格名稱。
TABLE_TYPE
表格為
BASE TABLE
,檢視為VIEW
,或是INFORMATION_SCHEMA
表格為SYSTEM VIEW
。TABLES
表格不會列出TEMPORARY
表格。ENGINE
表格的儲存引擎。請參閱 第 17 章,InnoDB 儲存引擎,以及 第 18 章,替代儲存引擎。
對於分割表格,
ENGINE
會顯示所有分割區使用的儲存引擎名稱。VERSION
此欄位未使用。隨著 MySQL 8.0 中
.frm
檔案的移除,此欄位現在會回報硬式編碼值10
,這是 MySQL 5.7 中使用的最後一個.frm
檔案版本。ROW_FORMAT
列儲存格式(
Fixed
、Dynamic
、Compressed
、Redundant
、Compact
)。對於MyISAM
表格,Dynamic
對應於 myisamchk -dvv 回報為Packed
的內容。TABLE_ROWS
資料列的數量。某些儲存引擎,例如
MyISAM
,會儲存確切的計數。對於其他儲存引擎,例如InnoDB
,此值為近似值,可能與實際值相差 40% 到 50%。在這種情況下,請使用SELECT COUNT(*)
來取得準確的計數。對於
INFORMATION_SCHEMA
資料表,TABLE_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
。即使在file-per-table 模式下,每個InnoDB
資料表都位於單獨的.ibd
檔案中,變更緩衝可能會延遲寫入資料檔案,因此檔案修改時間與上次插入、更新或刪除的時間不同。對於MyISAM
,會使用資料檔案的時間戳記;但是,在 Windows 上,時間戳記不會因更新而更新,因此值不準確。UPDATE_TIME
會顯示上次在未分割的InnoDB
資料表上執行的UPDATE
、INSERT
或DELETE
的時間戳記值。對於 MVCC,時間戳記值會反映COMMIT
時間,該時間被視為上次更新時間。當伺服器重新啟動或資料表從InnoDB
資料字典快取中移除時,時間戳記不會持續保存。CHECK_TIME
上次檢查資料表的時間。並非所有儲存引擎都會更新此時間,在這種情況下,該值始終為
NULL
。對於分割的
InnoDB
資料表,CHECK_TIME
始終為NULL
。TABLE_COLLATION
資料表預設定序。輸出不會明確列出資料表預設字元集,但定序名稱以字元集名稱開頭。
CHECKSUM
即時校驗和值(如果有的話)。
CREATE_OPTIONS
與
CREATE TABLE
一起使用的其他選項。對於分割資料表,
CREATE_OPTIONS
顯示partitioned
。對於在 file-per-table 表格空間中建立的資料表,
CREATE_OPTIONS
會顯示指定的ENCRYPTION
子句。如果資料表已加密,或指定的加密方式與結構描述加密方式不同,則會顯示 file-per-table 表格空間的加密子句。對於在一般表格空間中建立的資料表,不會顯示加密子句。若要識別已加密的 file-per-table 和一般表格空間,請查詢INNODB_TABLESPACES
ENCRYPTION
欄。當建立已停用嚴格模式的資料表時,如果指定的資料列格式不受支援,則會使用儲存引擎的預設資料列格式。資料表的實際資料列格式會在
ROW_FORMAT
欄中報告。CREATE_OPTIONS
會顯示在CREATE TABLE
陳述式中指定的資料列格式。當變更資料表的儲存引擎時,不適用於新儲存引擎的資料表選項會保留在資料表定義中,以便在必要時將具有先前定義選項的資料表還原至原始儲存引擎。
CREATE_OPTIONS
欄可能會顯示保留的選項。TABLE_COMMENT
建立資料表時使用的註解(或關於 MySQL 無法存取資料表資訊的原因)。
附註
對於
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
值會近似配置的實際記憶體量。配置演算法會保留大量記憶體,以減少配置作業的次數。對於檢視表,大多數
TABLES
欄為 0 或NULL
,但TABLE_NAME
表示檢視表名稱,CREATE_TIME
表示建立時間,而TABLE_COMMENT
則顯示VIEW
。
資料表資訊也可以從 SHOW TABLE STATUS
和 SHOW TABLES
陳述式取得。請參閱 第 15.7.7.37 節,「SHOW TABLE STATUS 陳述式」和 第 15.7.7.38 節,「SHOW TABLES 陳述式」。以下陳述式相等
SELECT
TABLE_NAME, ENGINE, VERSION, ROW_FORMAT, TABLE_ROWS, AVG_ROW_LENGTH,
DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, AUTO_INCREMENT,
CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, CHECKSUM,
CREATE_OPTIONS, TABLE_COMMENT
FROM INFORMATION_SCHEMA.TABLES
WHERE table_schema = 'db_name'
[AND table_name LIKE 'wild']
SHOW TABLE STATUS
FROM db_name
[LIKE 'wild']
以下陳述式相等
SELECT
TABLE_NAME, TABLE_TYPE
FROM INFORMATION_SCHEMA.TABLES
WHERE table_schema = 'db_name'
[AND table_name LIKE 'wild']
SHOW FULL TABLES
FROM db_name
[LIKE 'wild']