MySQL 8.0 リファレンスマニュアル


13.7.3.3 CHECKSUM TABLE ステートメント

CHECKSUM TABLE tbl_name [, tbl_name] ... [QUICK | EXTENDED]

CHECKSUM TABLE は、テーブルの内容に対するチェックサムをレポートします。 このステートメントを使用すると、その内容が、バックアップ、ロールバック、またはデータを元の既知の状態に戻すことを目的としたその他の操作の前後で同じであることを検証できます。

このステートメントには、このテーブルに対する SELECT 権限が必要です。

このステートメントはビューではサポートされていません。 ビューに対して CHECKSUM TABLE を実行すると、Checksum 値は常に NULL になり、警告が返されます。

存在しないテーブルに対しては、CHECKSUM TABLENULL を返し、警告を生成します。

チェックサム操作中、そのテーブルは InnoDB および MyISAM に対する読み取りロックでロックされます。

パフォーマンスに関する考慮事項

デフォルトでは、テーブル全体が 1 行ごとに読み取られ、チェックサムが計算されます。 大きなテーブルでは長い時間がかかる可能性があるため、この操作は、状況に応じてのみ実行されます。 この 1 行ごとの計算は、InnoDBMyISAM 以外のその他のすべてのストレージエンジン、および CHECKSUM=1 句で作成されていない MyISAM テーブルの場合に EXTENDED 句で得られるものと同じです。

CHECKSUM=1 句を使用して作成された MyISAM テーブルの場合、CHECKSUM TABLE または CHECKSUM TABLE ... QUICK は、非常に高速に返すことができる「ライブ」テーブルチェックサムを返します。 テーブルがこれらのすべての条件を満たさない場合、QUICK による方法は NULL を返します。 QUICK メソッドは、InnoDB テーブルではサポートされません。 CHECKSUM 句の構文については、セクション13.1.20「CREATE TABLE ステートメント」を参照してください。

チェックサム値は、テーブル行フォーマットによって異なります。 行フォーマットが変更された場合は、チェックサムも変更されます。 たとえば、MySQL より前の MySQL 5.6.5 で TIMEDATETIMETIMESTAMP などの時間型の記憶域形式が変更されたため、5.5 テーブルが MySQL 5.6 にアップグレードされると、チェックサム値が変更される可能性があります。

重要

2 つのテーブルのチェックサムが異なる場合は、それらのテーブルが何らかの点で異なることがほぼ確実です。 ただし、CHECKSUM TABLE によって使用されるハッシュ関数は衝突がないことは保証されないため、同一でない 2 つのテーブルが同じチェックサムを生成する可能性が若干あります。


関連キーワード:  ステートメント, TABLE, CREATE, テーブル, DROP, CHECKSUM, サブクエリー, FUNCTION, SLAVE, 関数