:: DEVELOPER ZONE
HANDLERtbl_nameOPEN [ ASalias] HANDLERtbl_nameREADindex_name{ = | >= | <= | < } (value1,value2,...) [ WHEREwhere_condition] [LIMIT ... ] HANDLERtbl_nameREADindex_name{ FIRST | NEXT | PREV | LAST } [ WHEREwhere_condition] [LIMIT ... ] HANDLERtbl_nameREAD { FIRST | NEXT } [ WHEREwhere_condition] [LIMIT ... ] HANDLERtbl_nameCLOSE
The HANDLER statement provides direct access to
table storage engine interfaces. It is available for
MyISAM tables as MySQL 4.0.0 and
InnoDB tables as of MySQL 4.0.3.
The HANDLER ... OPEN statement opens a table,
making it accessible via subsequent HANDLER ...
READ statements. This table object is not shared by other
threads and is not closed until the thread calls HANDLER
... CLOSE or the thread terminates. If you open the table
using an alias, further references to the table with other
HANDLER statements must use the alias rather than
the table name.
The first HANDLER ... READ syntax fetches a row
where the index specified satisfies the given values and the
WHERE condition is met. If you have a
multiple-column index, specify the index column values as a
comma-separated list. Either specify values for all the columns in
the index, or specify values for a leftmost prefix of the index
columns. Suppose that an index includes three columns named
col_a, col_b, and
col_c, in that order. The
HANDLER statement can specify values for all
three columns in the index, or for the columns in a leftmost prefix.
For example:
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) ...
The second HANDLER ... READ syntax fetches a row
from the table in index order that matches WHERE
condition.
The third HANDLER ... READ syntax fetches a row
from the table in natural row order that matches the
WHERE condition. It is faster than
HANDLER when a full table scan is desired. Natural row
order is the order in which rows are stored in a
tbl_name READ
index_nameMyISAM table data file. This statement works for
InnoDB tables as well, but there is no such
concept because there is no separate data file.
Without a LIMIT clause, all forms of
HANDLER ... READ fetch a single row if one is
available. To return a specific number of rows, include a
LIMIT clause. It has the same syntax as for the
SELECT statement. See Section 13.2.7, “SELECT Syntax”.
HANDLER ... CLOSE closes a table that was opened
with HANDLER ... OPEN.
Note: To use the HANDLER interface to refer to a
table's PRIMARY KEY, use the quoted identifier
`PRIMARY`:
HANDLER tbl_name READ `PRIMARY` > (...);
HANDLER is a somewhat low-level statement. For
example, it does not provide consistency. That is, HANDLER
... OPEN does not take a snapshot of
the table, and does not lock the table. This
means that after a HANDLER ... OPEN statement is
issued, table data can be modified (by this or any other thread) and
these modifications might appear only partially in HANDLER
... NEXT or HANDLER ... PREV scans.
There are several reasons to use the HANDLER
interface instead of normal SELECT statements:
HANDLER is faster than
SELECT:
A designated storage engine handler object is allocated for the
HANDLER ... OPEN. The object is reused for the
following HANDLER statements for the table; it
need not be reinitialized for each one.
There is less parsing involved.
There is no optimizer or query-checking overhead.
The table doesn't have to be locked between two handler requests.
The handler interface doesn't have to provide a consistent look of
the data (for example, dirty reads are allowed), so the storage
engine can use optimizations that SELECT
doesn't normally allow.
HANDLER makes it much easier to port
applications that use an ISAM-like interface to
MySQL.
HANDLER allows you to traverse a database in a
manner that is not easy (or perhaps even impossible) to do with
SELECT. The HANDLER interface
is a more natural way to look at data when working with
applications that provide an interactive user interface to the
database.
© 1995-2005 MySQL AB. All rights reserved.

User Comments
Warning: query failed: Unknown column 'user.firstname' in 'field list' in /data0/sites/live/web-main/lib/mysql-cxn.php on line 69
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /data0/sites/live/web-main/lib/docbook.php on line 245
Add your own comment.