mysql.h


HANDLER

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

La sentencia HANDLER proporciona un acceso directo al interfaz del motor de almacenamiento de una tabla MyISAM.

El primer formato de la sentencia HANDLER, permite el acceso medienta subsiguientes sentencias HANDLER ... READ. Este objeto tabla no se comparte con otros hilos y no podrá cerrarse hasta que el hilo llame a HANDLER tbl_name CLOSE o hasta que el hilo termine.

El segundo formato recoge una fila (o más, espedificadas mediante la cláusula LIMIT) donde el índice especificado satisfaga los valores dados y la condición WHERE se cumpla. Si se tiene un índice multicolumna, se deben especificar los valores de índice de columna como una lista separada con comas. Una de dos: o se especifican los valores para todas las columnas de un índice, o valores que definan un prefijo de las columnas más a la izquierda del índice. Supongamos un índice que incluya tres columnas llamadas col_a, col_b y col_c, es ese orden. La sentencia HANDLER puede especificar valores para las tres columnas en el índice, o para las columnas más a la izquierda. Por ejemplo:

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) ...

El tercer formato recoge una fila (o más, especificadas mediante la cláusula LIMIT) de la tabla según el orden del índice, y según la condición WHERE.

El cuarto formato (sin especificación de índice) recoge una fila (o más, especificadas mediante la cláusula LIMIT) de la tabla en el orden natural de las filas (tal como está almacenadas en el fichero de datose) que cumplan la condición WHERE. Es más rápido que HANDLER tbl_name READ index_name cuando se desea hacer un recorrido completo de la tabla.

HANDLER ... CLOSE cierra una tabla que fue abierta con HANDLER ... OPEN.

Nota: Si se usa el interfaz HANDLER para una PRIMARY KEY se debe recordar entrecomillar la palabra PRIMARY con acentos a la izquierda: HANDLER tbl READ `PRIMARY` > (...).

HANDLER es algo como una sentencia de bajo nivel. Por ejemplo, no proporciona consistencia. Es decir, HANDLER ... OPEN no toma una copia instantanea de la tabla, y no bloquea la tabla. Esto significa que después de hacer un HANDLER ... OPEN, los datos de la tabla pueden ser modifiados (por este o por otro hilo) y esas modificaciones pueden aparecer sólo de forma parcial en recorridos HANDLER ... NEXT o HANDLER ... PREV.

Las razones para usar este interfaz en lugar de SQL normal son:

  • Es más rápido que SELECT porque:
    • Se asigna un motos de almacenamiento para el hilo declarado en HANDLER OPEN.
    • Hay menos análisis involucrado.
    • No hay optimización y combrobación de consultas.
    • La tabla usada no tiene que ser bloqueda entre dos peticiones handler.
    • EL interfaz no tiene que proporcionar un aspecto consistente de los datos (por ejemplo, se permiten "lecturas sucias"), de modo que el motor de almacenamiento puede hacer optimizaciones que SQL normalmente no puede hacer.
  • Hace mucho más fácil portar aplicaciones que usen un ISAM como interfaz para MySQL.
  • Permite tratar una base de datos de un modo que no es fácil (en algunos casos imposible) hacer con SQL. El interfaz es un modo más natural de ver datos cuando se trabaja con aplicaciones que proporcionan un interfaz de usuario interactivo para la base de datos.