Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 26.8Mb
PDF (A4) - 26.9Mb
HTML Download (TGZ) - 7.1Mb
HTML Download (Zip) - 7.2Mb


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


User Comments
  Posted by Hugues de Mazancourt on January 6, 2006
If you get an error message like "Indexes use different block sizes", it can be caused by
- fulltext indexes,
- indexes longer than 256 bytes.

The first one is a known bug; for the second one, try to shorten column length or index a sub-part of the column.

For example, I had table t:
f1 VARCHAR(128),
f2 VARCHAR(128),
PRIMARY KEY(f1, f2)

The index didn't load into cache.
When I shortened f2 to VARCHAR(64), everything got OK.

/hugues

Sign Up Login You must be logged in to post a comment.