このページは機械翻訳したものです。
TABLES テーブルは、データベース内のテーブルに関する情報を提供します。
テーブル統計を表す TABLES のカラムには、キャッシュされた値が保持されます。 information_schema_stats_expiry システム変数は、キャッシュされたテーブルの統計が期限切れになるまでの期間を定義します。 デフォルトは 86400 秒 (24 時間) です。 キャッシュされた統計がない場合、または統計が期限切れになっている場合は、テーブル統計カラムのクエリー時にストレージエンジンから統計が取得されます。 特定のテーブルのキャッシュされた値をいつでも更新するには、ANALYZE TABLE を使用します。 常に最新の統計をストレージエンジンから直接取得するには、information_schema_stats_expiry を 0 に設定します。 詳細は、セクション8.2.3「INFORMATION_SCHEMA クエリーの最適化」を参照してください。
innodb_read_only システム変数が有効になっている場合、InnoDB を使用するデータディクショナリの統計テーブルを更新できないため、ANALYZE TABLE が失敗することがあります。 キー分散を更新する 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このテーブルのストレージエンジン。 第15章「InnoDB ストレージエンジン」および第16章「代替ストレージエンジン」を参照してください。
パーティション化されたテーブルの場合、
ENGINEには、すべてのパーティションで使用されるストレージエンジンの名前が表示されます。 -
VERSIONこのカラムは未使用です。 MySQL 8.0 で
.frmファイルを削除すると、このカラムには、MySQL 5.7 で最後に使用された.frmファイルバージョンである10のハードコードされた値がレポートされるようになりました。 -
ROW_FORMAT行ストレージフォーマット (
Fixed、Dynamic、Compressed、Redundant、Compact)。MyISAMテーブルの場合、Dynamicは、myisamchk -dvv がPackedとしてレポートする内容に対応します。 -
TABLE_ROWS行数。
MyISAMなどの一部のストレージエンジンは、正確な数を格納します。InnoDBなどのほかのストレージエンジンの場合、この値は概算であり、実際の値と 40% から 50% まで異なる可能性があります。 このような場合、正確な数を取得するにはSELECT COUNT(*)を使用します。TABLE_ROWSは、INFORMATION_SCHEMAテーブル用のNULLです。InnoDBテーブルの場合、行カウントは SQL 最適化で使用される単なる概算です。 (InnoDBテーブルがパーティション化されている場合も、これは当てはまります。) -
AVG_ROW_LENGTH平均行長。
-
DATA_LENGTHMyISAMの場合、DATA_LENGTHはデータファイルの長さ (バイト単位) です。InnoDBの場合、DATA_LENGTHは、クラスタ化されたインデックスに割り当てられるおおよその容量 (バイト単位) です。 具体的には、クラスタ化されたインデックスサイズ (ページ単位) にInnoDBページサイズを乗算したものです。その他のストレージエンジンについては、このセクションの最後にある注を参照してください。
-
MAX_DATA_LENGTHMyISAMの場合、MAX_DATA_LENGTHはデータファイルの最大長です。 これは、このテーブル内に格納できるデータの合計バイト数です (使用されるデータポインタサイズが指定された場合)。InnoDBでは未使用です。その他のストレージエンジンについては、このセクションの最後にある注を参照してください。
-
INDEX_LENGTHMyISAMの場合、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';詳細は、セクション26.21「INFORMATION_SCHEMA PARTITIONS テーブル」を参照してください。
-
AUTO_INCREMENT次の
AUTO_INCREMENT値。 -
CREATE_TIMEいつテーブルが作成されたか。
-
UPDATE_TIMEいつデータファイルが最後に更新されたか。 一部のストレージエンジンでは、この値は
NULLです。 たとえば、InnoDBはそのシステムテーブルスペース内に複数のテーブルを格納するため、データファイルのタイムスタンプは適用されません。 各InnoDBテーブルが個別の.ibdファイル内に存在する file-per-table モードの場合でも、変更バッファリングによってデータファイルへの書き込みが遅延される可能性があるため、ファイルの変更時間は最後の挿入、更新、または削除の時間とは異なります。MyISAMの場合、データファイルのタイムスタンプが使用されますが、Windows ではタイムスタンプは更新によって更新されないため、値は正確ではありません。UPDATE_TIMEには、パーティション化されていないInnoDBテーブルに対して最後に実行されたUPDATE、INSERTまたはDELETEのタイムスタンプ値が表示されます。 MVCC の場合、タイムスタンプ値は最終更新時間とみなされるCOMMIT時間を反映します。 タイムスタンプは、サーバーの再起動時、またはテーブルがInnoDBデータディクショナリキャッシュから削除されたときに永続化されません。 -
CHECK_TIMEいつテーブルが最後にチェックされたか。 すべてのストレージエンジンがこの時間を更新するわけではありません。この場合、値は常に
NULLです。パーティション化された
InnoDBテーブルの場合、CHECK_TIMEは常にNULLです。 -
TABLE_COLLATIONテーブルのデフォルトの照合。 出力にはテーブルのデフォルトの文字セットは明示的にリストされませんが、照合順序名は文字セット名で始まります。
-
CHECKSUMライブチェックサム値 (存在する場合)。
-
CREATE_OPTIONSCREATE TABLEで使用される追加のオプション。CREATE_OPTIONSには、パーティションテーブルのpartitionedが表示されます。MySQL 8.0.16 より前の
CREATE_OPTIONSでは、file-per-table テーブルスペースに作成されたテーブルに指定されたENCRYPTION句が表示されます。 MySQL 8.0.16 では、テーブルが暗号化されている場合、または指定された暗号化がスキーマ暗号化と異なる場合、file-per-table テーブルスペースの暗号化句が表示されます。 暗号化句は、一般テーブルスペースに作成されたテーブルには表示されません。 暗号化された file-per-table および一般的なテーブルスペースを識別するには、INNODB_TABLESPACESENCRYPTIONカラムをクエリーします。strict mode を無効にしてテーブルを作成する場合、指定した行フォーマットがサポートされていないと、ストレージエンジンのデフォルトの行フォーマットが使用されます。 テーブルの実際の行形式は、
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の値は、割り当てられたメモリーの実際の量を概算します。 割り当てアルゴリズムは、割り当て操作の数を減らすために、大量のメモリーを確保します。ビューの場合、
TABLE_NAMEがビュー名を示し、CREATE_TIMEが作成時間を示し、TABLE_COMMENTがVIEWを示すことを除き、ほとんどのTABLESカラムは 0 またはNULLです。
テーブル情報は、SHOW TABLE STATUS ステートメントおよび SHOW TABLES ステートメントからも入手できます。 セクション13.7.7.38「SHOW TABLE STATUS ステートメント」およびセクション13.7.7.39「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']