HANDLER tbl_name OPEN [ AS alias ] HANDLER tbl_name READ index_name { = | >= | <= | < } (value1,value2,...) [ WHERE ... ] [LIMIT ... ] HANDLER tbl_name READ index_name { FIRST | NEXT | PREV | LAST } [ WHERE ... ] [LIMIT ... ] HANDLER tbl_name READ { FIRST | NEXT } [ WHERE ... ] [LIMIT ... ] HANDLER tbl_name CLOSE
HANDLER
ステートメントでは、MyISAM
テーブルのストレージエンジンインタフェースに直接アクセスすることができます。
最初の形式の HANDLER
ステートメントでは、テーブルが開かれ、後続の
HANDLER ... READ
ステートメントでのアクセスが可能になります。
このテーブルオブジェクトは他のスレッドと共有されていないため、そのスレッドが
HANDLER tbl_name CLOSE
を呼び出すか、またはそのスレッドが終了するまで、テーブルオブジェクトが閉じられることはありません。
2 番目の形式の HANDLER
ステートメントでは、指定したインデックスが指定した値にマッチし、かつ
WHERE
条件を満たしている 1
つ(または、LIMIT
節の指定に基づく複数)のレコードが読み取られます。複合インデックスがある場合は、対象のインデックスカラム値をカンマで区切られたリストとして指定します。この場合、インデックスのすべてのカラムの各値を指定するか、またはインデックスカラムの左端のプリフィックスの値を指定します。たとえば、col_a
、col_b
、col_c
という名前の 3
つのカラムがこの順序でインデックスに含まれているとします。
HANDLER
ステートメントでは、インデックスの 3
つすべてのカラムの値を指定するか、または左端のプリフィックスのカラムの値を指定することができます。次に例を示します。
HANDLER ... index_name = (col_a_val,col_b_val,col_c_val) ... HANDLER ... index_name = (col_a_val,col_b_val) ... HANDLER ... index_name = (col_a_val) ...
3 番目の形式の HANDLER
ステートメントでは、WHERE
条件を満たしている 1
つ(または、LIMIT
節の指定に基づく複数)のレコードがテーブルからインデックスの順序で読み取られます。
4 番目の形式の HANDLER
ステートメント(インデックスの指定なし)では、WHERE
条件を満たしている 1
つ(または、LIMIT
節の指定に基づく複数)のレコードがテーブルからそのまままのレコード順序(データファイルに格納されている順序)で読み取られます。テーブルのフルスキャンを行う必要がある場合、この形式は
HANDLER tbl_name READ index_name
形式より迅速です。
HANDLER ... CLOSE
では、HANDLER
... OPEN
で開かれたテーブルが閉じられます。
注意:PRIMARY KEY
の
HANDLER
インタフェースを使用している場合は、HANDLER
tbl READ `PRIMARY` > (...)
のように、キーワード PRIMARY
をバッククォート記号で必ず囲みます。
HANDLER
は、やや低レベルのステートメントです。たとえば、整合性は確保されません。つまり、HANDLER
... OPEN
はテーブルのスナップショットを取るものではなく、テーブルのロックも行いません。そのため、HANDLER
... OPEN
の発行後に、テーブルデータが変更される(そのスレッドまたは他のスレッドによって)可能性があります。このような変更は
HANDLER ... NEXT
スキャンや
HANDLER ... PREV
スキャンでは部分的にしか示されないことがあります。
通常の SQL の代わりにこのインタフェースを使用する理由は、次のとおりです。
次の理由で、SELECT
より処理が迅速。
HANDLER OPEN
では、指定したストレージエンジンがスレッドに割り当てられる。
実行される解析が少ない。
オプティマイザやクエリチェックのオーバヘッドがない。
2 つのハンドラ要求間で、使用テーブルをロックする必要がない。
ハンドラインタフェースでは、整合性のあるデータの提供は重要とされていないため(たとえば、ダーティリードが可能)、SQL によって通常許可されない最適化をストレージエンジンで実行することができる。
ISAM のような MySQL インタフェースを使用するアプリケーションの移植をはるかに容易に実行できる。
SQL では難しい(場合によっては不可能な)方法で、データベースをスキャンできる。データベースの対話式ユーザインタフェースを提供するアプリケーションを処理する場合には、データを参照する方法としてハンドラインタフェースを使用したほうがより自然である。
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.