HANDLER 構文

HANDLER tbl_name OPEN [ AS alias ]
HANDLER tbl_name READ index_name { = | >= | <= | < } (value1,value2,...)
    [ WHERE where_condition ] [LIMIT ... ]
HANDLER tbl_name READ index_name { FIRST | NEXT | PREV | LAST }
    [ WHERE where_condition ] [LIMIT ... ]
HANDLER tbl_name READ { FIRST | NEXT }
    [ WHERE where_condition ] [LIMIT ... ]
HANDLER tbl_name CLOSE

HANDLER ステートメントは、テーブル ストレージ エンジン インターフェースへの直接アクセスを供給します。これは MyISAMInnoDB テーブルに有効です。

HANDLER ... OPEN ステートメントはテーブルをオープンし、それに続く HANDLER ... READ ステートメントを通してテーブルをアクセス可能にします。このテーブルは他のスレッドと共有されず、スレッドが HANDLER ... CLOSE をコールするか、終了するまでは閉じられません。もしエイリアスを利用してテーブルをオープンすると、別の HANDLER ステートメントを利用しているオープンされたテーブルへの更なる参照時には、テーブル名ではなくエイリアスを利用しなければいけません。

最初の HANDLER ... READ 構文は、指定されたインデックスが与えられた値を満たし WHERE 条件が一致する行をフェッチします。もし複合カラム インデックスがあるなら、インデックス カラム値をカンマで区切られたリストで指示してください。インデックス内の全てのカラムに値を指定するか、インデックス カラムの左端のプリフィックスに値を指定してください。インデックス my_idxcol_acol_b、そして col_c という名前の3つのカラムをこの通りの順番で含むと仮定してください。HANDLER ステートメントはインデックス内の3つ全てのカラム、または左端のプリフィックス内のカラムに値を指定する事ができます。例:

HANDLER ... READ my_idx = (col_a_val,col_b_val,col_c_val) ...
HANDLER ... READ my_idx = (col_a_val,col_b_val) ...
HANDLER ... READ my_idx = (col_a_val) ...

テーブルの PRIMARY KEY を参照する為に HANDLER インターフェースを利用するには、引用識別子の `PRIMARY` を利用してください。

HANDLER tbl_name READ `PRIMARY` ...

2つ目の HANDLER ... READ 構文は WHERE 条件に合うインデックス順でテーブルから行をフェッチします。

2つ目の HANDLER ... READ 構文は WHERE 条件に合うインデックス順でテーブルから行をフェッチします。これは、フル テーブル スキャンが必要な時には HANDLER tbl_name READ index_name よりも速いです。自然な行の順番というのは、MyISAM テーブル データ ファイルの中で行が格納されている順番です。このステートメントは InnoDB テーブルにも機能しますが、別のデータ ファイルがないので同じようなコンセプトはありません。

HANDLER ... READ の全ての形は単列が空いていれば LIMIT 無しでそれをフェッチします。指定した行数を返す為には LIMIT 条項を含んでください。これは、SELECT ステートメントと同じ構文を持ちます。詳しくは 項 「SELECT 構文」 を参照してください。

HANDLER ... CLOSEHANDLER ... OPEN がオープンしたテーブルを閉じます。

HANDLER は若干低レベルなステートメントです。例えば、これは一貫性を持ちません。これは、HANDLER ... OPEN はテーブルのスナップショットを 撮らない、またテーブルを ロックしない という事です。これは、HANDLER ... OPEN ステートメントが発行された後、テーブル データを変更する事ができ(現在のスレッドか別のスレッドを利用して)、そしてそれらの変更点はHANDLER ... NEXTHANDLER ... PREV スキャンで部分的にだけ見る事ができるかもしれない、という事を意味します。

通常の SELECT ステートメントの代わりに、HANDLER インターフェースを利用するのにはいくつかの理由があります。