全てのインデックスのブロックを保持するためのキーキャッシュ内に十分なブロックがある場合、もしくは少なくとも非リーフノードと一致するブロックがある場合、使用する前に、インデックスブロックでキーキャッシュをプレロードするのは理にかなっています。プレロードによって、テーブルインデックスブロックを最も効果的な方法でキーキャッシュバッファ内におくことができます。ディスクから連続してインデックスブロックを読む方法。
プレロードなしでは、ブロックは、クエリの必要に応じてキーキャッシュ内におかれます。ブロックはキャッシュ内にとどまりますが、バッファは足りているため、ディスクからランダムかつ不連続に取得されます。
インデックスをキャッシュにプレロードするには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
ステートメントを用いてキーキャッシュに割り当てられた場合、プレロードはインデックスブロックをキャッシュ内に置きます。もしくは、インデックスはデフォルトキーキャッシュにロードされます。