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