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


8.10.2.4 インデックスプリロード

キーキャッシュ内に、インデックス全体のブロックを保持するために十分なブロックがあるか、または少なくともその非リーフノードに対応するブロックがある場合、使用を開始する前に、キーキャッシュにインデックスブロックをプリロードすることは役立ちます。 プリロードにより、インデックスブロックをディスクから順番に読み取ることで、もっとも効率的にテーブルインデックスをキーキャッシュバッファーに挿入できます。

プリロードしない場合、ブロックは、引き続きクエリーによって必要とされるときに、キーキャッシュに置かれます。 ブロックはキャッシュ内に残りますが、すべてのバッファが十分にあるため、ディスクからランダムな順序でフェッチされ、順次フェッチされません。

インデックスをキャッシュにプリロードするには LOAD INDEX INTO CACHE ステートメントを使用します。 たとえば、次のステートメントはテーブル t1 および t2 のインデックスのノード (インデックスブロック) をプリロードします。

mysql> LOAD INDEX INTO CACHE t1, t2 IGNORE LEAVES;
+---------+--------------+----------+----------+
| Table   | Op           | Msg_type | Msg_text |
+---------+--------------+----------+----------+
| test.t1 | preload_keys | status   | OK       |
| test.t2 | preload_keys | status   | OK       |
+---------+--------------+----------+----------+

IGNORE LEAVES 修飾子によって、インデックスの非リーフノードのブロックのみがプリロードされます。 したがって、上記のステートメントは t1 からすべてのインデックスブロックをプリロードしますが、t2 からは非リーフノードのブロックのみをプリロードします。

インデックスが CACHE INDEX ステートメントを使用してキーキャッシュに割り当てられている場合、プリロードによって、インデックスブロックがそのキャッシュに置かれます。 そうでない場合は、インデックスはデフォルトのキーキャッシュにロードされます。


関連キーワード:  インデックス, テーブル, InnoDB, キャッシュ, ステートメント, ブロック, キー, プリロード, 結合, クエリー