文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 參考手冊  /  ...  /  INFORMATION_SCHEMA TABLES 表

28.3.38 INFORMATION_SCHEMA TABLES 表

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

    列儲存格式(FixedDynamicCompressedRedundantCompact)。對於 MyISAM 表格,Dynamic 對應於 myisamchk -dvv 回報為 Packed 的內容。

  • TABLE_ROWS

    列數。某些儲存引擎(例如 MyISAM)會儲存確切的計數。對於其他儲存引擎(例如 InnoDB),此值為近似值,可能與實際值相差 40% 到 50%。在這種情況下,請使用 SELECT COUNT(*) 來取得精確的計數。

    對於 INFORMATION_SCHEMA 表格,TABLE_ROWSNULL

    對於 InnoDB 表格,列數僅為 SQL 最佳化中使用的粗略估計值。(如果 InnoDB 表格已分割,情況也是如此。)

  • AVG_ROW_LENGTH

    平均列長度。

  • DATA_LENGTH

    對於 MyISAMDATA_LENGTH 是資料檔案的長度,以位元組為單位。

    對於 InnoDBDATA_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';

    如需更多資訊,請參閱 第 28.3.21 節,「INFORMATION_SCHEMA PARTITIONS 表格」

  • AUTO_INCREMENT

    下一個 AUTO_INCREMENT 值。

  • CREATE_TIME

    資料表建立的時間。

  • UPDATE_TIME

    資料表上次更新的時間。對於某些儲存引擎,此值為 NULL。即使在每個 InnoDB 資料表都位於單獨的 .ibd 檔案的 file-per-table 模式下,變更緩衝也可能延遲寫入資料檔案,因此檔案修改時間與上次插入、更新或刪除的時間不同。對於 MyISAM,會使用資料檔案的時間戳記;但是,在 Windows 上,時間戳記不會因更新而更新,因此該值不準確。

    UPDATE_TIME 會顯示上次在未分割的 InnoDB 資料表上執行 UPDATEINSERTDELETE 的時間戳記值。對於 MVCC,時間戳記值反映 COMMIT 時間,該時間被視為上次更新時間。當伺服器重新啟動或資料表從 InnoDB 資料字典快取中移除時,時間戳記不會持續保留。

  • CHECK_TIME

    資料表上次檢查的時間。並非所有儲存引擎都會更新此時間,在這種情況下,該值始終為 NULL

    對於分割的 InnoDB 資料表,CHECK_TIME 始終為 NULL

  • TABLE_COLLATION

    資料表的預設排序規則。輸出不會明確列出資料表的預設字元集,但排序規則名稱以字元集名稱開頭。

  • CHECKSUM

    如果有,則為即時校驗和值。

  • CREATE_OPTIONS

    CREATE TABLE 一起使用的額外選項。

    對於分割資料表,CREATE_OPTIONS 顯示 partitioned

    CREATE_OPTIONS 顯示為在 file-per-table 表格空間中建立的資料表指定的 ENCRYPTION 子句。如果資料表已加密或指定的加密與結構描述加密不同,它會顯示 file-per-table 表格空間的加密子句。對於在一般表格空間中建立的資料表,不會顯示加密子句。若要識別加密的 file-per-table 和一般表格空間,請查詢 INNODB_TABLESPACESENCRYPTION 欄位。

    當使用停用的嚴格模式建立資料表時,如果指定的資料列格式不受支援,則會使用儲存引擎的預設資料列格式。資料表的實際資料列格式會在 ROW_FORMAT 欄位中回報。CREATE_OPTIONS 會顯示在 CREATE TABLE 陳述式中指定的資料列格式。

    變更資料表的儲存引擎時,不適用於新儲存引擎的資料表選項會保留在資料表定義中,以便在必要時將具有先前定義選項的資料表還原至原始儲存引擎。CREATE_OPTIONS 欄位可能會顯示保留的選項。

  • TABLE_COMMENT

    建立資料表時使用的註解(或關於 MySQL 無法存取資料表資訊的原因資訊)。

注意事項

  • 對於 NDB 資料表,此陳述式的輸出會顯示 AVG_ROW_LENGTHDATA_LENGTH 欄位的適當值,但 BLOB 欄位除外。

  • 對於 NDB 資料表,DATA_LENGTH 僅包含儲存在主記憶體中的資料;MAX_DATA_LENGTHDATA_FREE 欄位適用於磁碟資料。

  • 對於 NDB Cluster 磁碟資料表,MAX_DATA_LENGTH 會顯示為磁碟資料表或片段的磁碟部分分配的空間。(記憶體中的資料資源使用情況由 DATA_LENGTH 欄位回報。)

  • 對於 MEMORY 資料表,DATA_LENGTHMAX_DATA_LENGTHINDEX_LENGTH 值會近似分配的實際記憶體量。分配演算法會保留大量記憶體以減少分配操作的次數。

  • 對於檢視表,大部分 TABLES 欄位為 0 或 NULL,但 TABLE_NAME 表示檢視表名稱、CREATE_TIME 表示建立時間,而 TABLE_COMMENT 則顯示 VIEW

資料表資訊也可從 SHOW TABLE STATUSSHOW 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']