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
или сам поток не будет уничтожен.
Вторая форма выбирает одну строку (или больше - в соответствии с
установкой в выражении LIMIT
), для которой(ых) указанный индекс
соответствует заданному условию и условие в выражении WHERE
также
выполняется. Если индекс состоит из нескольких частей (охватывает
несколько столбцов), то составляющие его величины указываются в виде
разделенного запятыми списка. Обеспечиваются величины только для
нескольких первых столбцов.
Третья форма выбирает одну строку (или больше - в соответствии с
установкой в выражении LIMIT
), из таблицы; в порядке указания индексов в
соответствии с условием WHERE
.
Четвертая форма (без указания индексов) выбирает одну строку (или больше -
в соответствии с установкой в выражении LIMIT
), из таблицы, используя
естественный порядок строк (как они хранятся в файле данных), в
соответствии с условием WHERE
. Эта форма работает быстрее, чем HANDLER tbl_name READ index_name
, в тех случаях, когда желателен просмотр всей
таблицы.
Оператор HANDLER ... CLOSE
закрывает таблицу, открытую оператором
HANDLER ... OPEN
.
Оператор HANDLER
представляет собой что-то наподобие низкоуровневой
команды. Например, он не обеспечивает целостности таблицы. Т.е. HANDLER ... OPEN
НЕ делает моментального снимка таблицы и НЕ блокирует ее. Отсюда
следует, что после вызова команды HANDLER ... OPEN
данные таблицы могут
быть модифицированы (этим или любым другим потоком), а сами модификации в
просмотрах таблицы при помощи HANDLER ... NEXT
или HANDLER ... PREV
могут
появляться только частично.
Вот причины, по которым вы можете предпочесть HANDLER вместо обычного SQL:
-
Он быстрее чем
SELECT
, потому что:Выделенный код обработчика таблиц создается в потоке по вызову
HANDLER open
.Меньше синтаксического анализа.
Нет нагрузки на оптимизацию и проверку.
Таблицу не нужно блокировать между запросами.
Этот интерфейс не обязан предоставлять целостный вид данных (скажем, грязное чтение допускается), что позволяет обработчику таблиц делать оптимизации которые SQL обычно не допускает.
Гораздо легче переносить на MySQL приложения, которые используют интерфейс, подобный ISAM.
Такой интерфейс позволяет просматривать базу данных способом, который не так легко (или в некоторых случаях и вовсе невозможно) реализовать с помощью SQL. Интерфейс HANDLER является более естественным способом получить данные, когда приходится иметь дело с интерактивными пользовательскими приложениями.