6.4.2 Синтаксис оператора 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
Оператор 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 является более естественным способом получить данные, когда приходится иметь дело с интерактивными пользовательскими приложениями.
