MySQL 5.6 リファレンスマニュアル  /  INFORMATION_SCHEMA テーブル  /  INFORMATION_SCHEMA TABLES テーブル

21.22 INFORMATION_SCHEMA TABLES テーブル

TABLES テーブルは、データベース内のテーブルに関する情報を提供します。

INFORMATION_SCHEMA SHOW 備考
TABLE_CATALOG def
TABLE_SCHEMA Table_...
TABLE_NAME Table_...
TABLE_TYPE
ENGINE Engine MySQL 拡張
VERSION Version テーブルの .frm ファイルのバージョン番号、MySQL 拡張
ROW_FORMAT Row_format MySQL 拡張
TABLE_ROWS Rows MySQL 拡張
AVG_ROW_LENGTH Avg_row_length MySQL 拡張
DATA_LENGTH Data_length MySQL 拡張
MAX_DATA_LENGTH Max_data_length MySQL 拡張
INDEX_LENGTH Index_length MySQL 拡張
DATA_FREE Data_free MySQL 拡張
AUTO_INCREMENT Auto_increment MySQL 拡張
CREATE_TIME Create_time MySQL 拡張
UPDATE_TIME Update_time MySQL 拡張
CHECK_TIME Check_time MySQL 拡張
TABLE_COLLATION Collation MySQL 拡張
CHECKSUM Checksum MySQL 拡張
CREATE_OPTIONS Create_options MySQL 拡張
TABLE_COMMENT Comment MySQL 拡張

:

  • TABLE_SCHEMA および TABLE_NAME は、Table_in_db1 など、SHOW 表示の単一のフィールドです。

  • TABLE_TYPEBASE TABLE または VIEW になります。現在、TABLES テーブルは TEMPORARY テーブルをリストしません。

  • パーティション化されたテーブルの場合、ENGINE カラムには、すべてのパーティションで使用されるストレージエンジンの名前が表示されます。(以前は、このカラムには、このようなテーブルに対し PARTITION が表示されていました。)

  • テーブルが INFORMATION_SCHEMA データベースにある場合、TABLE_ROWS カラムは NULL です。

    InnoDB テーブルの場合、行カウントは SQL 最適化で使用される単なる概算です。(InnoDB テーブルがパーティション化されている場合も、これは当てはまります。)

  • DATA_FREE カラムには、InnoDB テーブルの空き領域がバイト単位で表示されます。

  • テーブルのデフォルトの文字セットはありません。照合順序名は文字セット名で始まるため、TABLE_COLLATION は閉じています。

  • テーブルがパーティション化されている場合、CREATE_OPTIONS カラムには partitioned と表示されます。

次のステートメントは同等です。

SELECT table_name FROM INFORMATION_SCHEMA.TABLES
  WHERE table_schema = 'db_name'
  [AND table_name LIKE 'wild']

SHOW TABLES
  FROM db_name
  [LIKE 'wild']

User Comments
  Posted by Leslie I'Anson on February 11, 2009
My understanding of calculating database size is to add the size of the tables to the size of the indexes; database = table(s) + index(es).

SELECT concat( table_schema, '.', table_name ) table_name,
concat( round( data_length / ( 1024 *1024 ) , 2 ) , 'M' ) data_length,
concat( round( index_length / ( 1024 *1024 ) , 2 ) , 'M' ) index_length,
concat( round( round( data_length + index_length ) / ( 1024 *1024 ) , 2 ) , 'M' ) total_size
FROM information_schema.TABLES
ORDER BY data_length DESC;

I've completed some rudimentary tests which seem to confirm this, at least in the case of MySQL databases.

Feedback welcomed!
  Posted by Aleksandar Kostadinov on October 12, 2009
Better would be 'ORDER BY ( data_length + index_length ) DESC' to get proper ordering. As well you can skip the inner round in total_size calculation.
Additionally engine type should be observed. One would care about certain types of tables. For example memory or non-memory. Unfortunately I can't see a consistent way to tell how much real disk space is occupied by a database.

Thanks for the expression though!

Following should show size per database:
SELECT table_schema 'database',
concat( round( sum( data_length + index_length ) / ( 1024 *1024 ) , 2 ) , 'M' ) size
FROM information_schema.TABLES
WHERE ENGINE=('MyISAM' || 'InnoDB' )
GROUP BY table_schema;
  Posted by Kalina Detko on September 2, 2010
TABLE_ROWS (and perhaps some other columns in INFORMATION_SCHEMA.TABLES) may get out of sync with the current table contents, but you can update it by running ANALYZE.
  Posted by Naref Szolik on May 27, 2012
UPDATE_TIME only stores values for a subset of the available table storage engines.
  Posted by Chris Calender on March 7, 2013
UPDATE_TIME works for MyISAM, not InnoDB.

From my tests, it updated the timestamp on both DML and DDL operations.
Sign Up Login You must be logged in to post a comment.