13.7.6.5 LOAD INDEX INTO CACHE 構文

LOAD INDEX INTO CACHE
  tbl_index_list [, tbl_index_list] ...

tbl_index_list:
  tbl_name
    [PARTITION (partition_list | ALL)]
    [[INDEX|KEY] (index_name[, index_name] ...)]
    [IGNORE LEAVES]

partition_list:
    partition_name[, partition_name][, ...]

LOAD INDEX INTO CACHE ステートメントは、明示的な CACHE INDEX ステートメントによって割り当てられたキーキャッシュ、またはそれ以外の場合はデフォルトのキーキャッシュにテーブルインデックスをプリロードします。

LOAD INDEX INTO CACHE は、MyISAM テーブルにのみ使用されます。MySQL 5.6 では、パーティション化された MyISAM テーブルに対してもサポートされます。さらに、パーティション化されたテーブル上のインデックスを 1 つ、複数、またはすべてのパーティションに対してプリロードできます。

IGNORE LEAVES 修飾子によって、インデックスの非リーフノードのブロックのみがプリロードされます。

IGNORE LEAVES は、パーティション化された MyISAM テーブルに対してもサポートされます。

次のステートメントは、テーブル t1t2 のインデックスのノード (インデックスブロック) をプリロードします。

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       |
+---------+--------------+----------+----------+

このステートメントは、t1 からすべてのインデックスブロックをプリロードします。t2 からは、非リーフノードのブロックのみをプリロードします。

LOAD INDEX INTO CACHE の構文では、テーブルの特定のインデックスのみをプリロードするように指定できます。現在の実装では、テーブルのすべてのインデックスをキャッシュにプリロードするため、テーブル名以外のものを指定する理由は何もありません。

MySQL 5.6.11 でのみ、このステートメントを発行する前に、gtid_nextAUTOMATIC に設定する必要があります。(Bug #16062608、Bug #16715809、Bug #69045)

MySQL 5.6 では、パーティション化された MyISAM テーブルの特定のパーティション上のインデックスをプリロードできます。たとえば、次の 2 つのステートメントでは、最初が、パーティション化されたテーブル pt のパーティション p0 のインデックスをプリロードするのに対して、2 番目は同じテーブルのパーティション p1p3 のインデックスをプリロードします。

LOAD INDEX INTO CACHE pt PARTITION (p0);
LOAD INDEX INTO CACHE pt PARTITION (p1, p3);

テーブル pt 内のすべてのパーティションのインデックスをプリロードするには、次の 2 つのステートメントのどちらでも使用できます。

LOAD INDEX INTO CACHE pt PARTITION (ALL);

LOAD INDEX INTO CACHE pt;

今示した 2 つのステートメントは同等であり、このうちのどちらを発行しても効果はまったく同じです。つまり、パーティション化されたテーブルのすべてのパーティションのインデックスをプリロードする場合、PARTITION (ALL) 句はオプションです。

複数のパーティションのインデックスをプリロードする場合、それらのパーティションが連続している必要はなく、それらの名前を特定の順序でリストする必要もありません。

LOAD INDEX INTO CACHE ... IGNORE LEAVES は、テーブル内のすべてのインデックスのブロックサイズが同じでないかぎり失敗します。テーブルのインデックスブロックサイズは、myisamchk -dv を使用し、Blocksize カラムをチェックすることによって特定できます。


User Comments
  Posted by Marco Gergele on April 19, 2005
If you get an error like:
| preload_keys | error | Indexes use different block sizes |
| preload_keys | status | Operation failed |
, then you probably have variable-length columns in one of the indices.

The fix is to find a relevant constant-length part for the indexed columns and to index only that fixed-length part.

I'm not sure if variable-length keys aren't cached at all or if just this preload-command fails.

  Posted by Otheus Shelling on February 12, 2009
The only privilege needed for a user is the SELECT privilege for the given table(s).
Sign Up Login You must be logged in to post a comment.