Spec-Zone.ru › MySQL 5.7

13.2.4 Оператор HANDLER

HANDLER tbl_name OPEN [ [AS] alias]

HANDLER tbl_name READ index_name { = | <= | >= | < | > } (value1,value2,...)
    [ WHERE where_condition ] [LIMIT ... ]
HANDLER tbl_name READ index_name { FIRST | NEXT | PREV | LAST }
    [ WHERE where_condition ] [LIMIT ... ]
HANDLER tbl_name READ { FIRST | NEXT }
    [ WHERE where_condition ] [LIMIT ... ]

HANDLER tbl_name CLOSE

Оператор HANDLER предоставляет прямой доступ к интерфейсам хранилища таблиц. Он доступен для таблиц InnoDB и MyISAM.

Оператор HANDLER ... OPEN открывает таблицу, делая её доступной с помощью последующих операторов HANDLER ... READ. Этот объект таблицы не разделятся с другими сессиями и не закрывается до тех пор, пока сессия не выполнит оператор HANDLER ... CLOSE или не завершится.

Если вы открываете таблицу с псевдонимом, дальнейшие ссылки на открытую таблицу с другими операторами HANDLER должны использовать псевдоним, а не имя таблицы. Если вы не используете псевдоним, но открываете таблицу с именем таблицы, квалифицированным именем базы данных, дальнейшие ссылки должны использовать неквалифицированное имя таблицы. Например, для таблицы, открытой с помощью mydb.mytable, дальнейшие ссылки должны использовать mytable.

Первый синтаксис оператора HANDLER ... READ извлекает строку, где указанный индекс удовлетворяет заданным значениям и выполняется условие WHERE. Если у вас есть индекс с несколькими столбцами, укажите значения столбцов индекса в виде списка, разделённого запятыми. Укажите значения для всех столбцов в индексе или укажите значения для левого префикса столбцов индекса. Предположим, что индекс my_idx включает три столбца с именами col_a, col_b и col_c в этом порядке. Оператор HANDLER может указать значения для всех трёх столбцов в индексе или для столбцов левого префикса. Например:

HANDLER ... READ my_idx = (col_a_val,col_b_val,col_c_val) ...
HANDLER ... READ my_idx = (col_a_val,col_b_val) ...
HANDLER ... READ my_idx = (col_a_val) ...

Чтобы использовать интерфейс HANDLER для ссылки на PRIMARY KEY таблицы, используйте цитируемое имя `PRIMARY`:

HANDLER tbl_name READ `PRIMARY` ...

Второй синтаксис оператора HANDLER ... READ извлекает строку из таблицы в порядке индекса, которая соответствует условию WHERE.

Третий синтаксис оператора HANDLER ... READ извлекает строку из таблицы в естественном порядке строк, которая соответствует условию WHERE. Он быстрее, чем HANDLER tbl_name READ index_name, когда требуется полное сканирование таблицы. Естественный порядок строк — это порядок, в котором строки хранятся в файле данных таблицы MyISAM. Этот оператор также работает с таблицами InnoDB, но такого понятия нет, поскольку нет отдельного файла данных.

Без предложения LIMIT все формы оператора HANDLER ... READ извлекают одну строку, если она доступна. Чтобы вернуть определенное количество строк, включите предложение LIMIT. Оно имеет тот же синтаксис, что и для оператора SELECT. См. Раздел 13.2.9, «Оператор SELECT».

HANDLER ... CLOSE закрывает таблицу, которая была открыта оператором HANDLER ... OPEN.

Есть несколько причин использовать интерфейс HANDLER вместо обычных операторов SELECT:

  • HANDLER быстрее, чем операторы SELECT:

    • Для оператора HANDLER ... OPEN выделяется выделяется объект-обработчик хранилища. Объект повторно используется для последующих операторов HANDLER для этой таблицы; его не нужно повторно инициализировать для каждого из них.

    • Меньше участвует парсинг.

    • Нет накладных расходов оптимизатора или проверки запросов.

    • Интерфейсу обработчика не нужно обеспечивать согласованный вид данных (например, разрешены), поэтому хранилище может использовать оптимизации, которые SELECT обычно не допускает.

  • HANDLER упрощает портирование в приложения MySQL, которые используют интерфейс низкого уровня, подобный ISAM. (См. Раздел 14.21, «Плагин InnoDB memcached» для альтернативного способа адаптации приложений, использующих парадигму хранилища ключей-значений.)

  • HANDLER позволяет просматривать базу данных способом, который трудно (или даже невозможно) реализовать с помощью операторов SELECT. Интерфейс HANDLER — более естественный способ просмотра данных при работе с приложениями, которые предоставляют интерактивный пользовательский интерфейс к базе данных.

HANDLER — это оператор несколько низкого уровня. Например, он не обеспечивает согласованности. То есть, оператор HANDLER ... OPEN не создает моментальную фотографию таблицы и не блокирует таблицу. Это означает, что после выполнения оператора HANDLER ... OPEN данные таблицы могут быть изменены (текущей сессией или другими сессиями), и эти изменения могут быть только частично видны операторам HANDLER ... NEXT или HANDLER ... PREV.

Открытый обработчик может быть закрыт и помечен для повторного открытия, в этом случае обработчик теряет свою позицию в таблице. Это происходит, когда оба следующих условия истинны:

  • Любая сессия выполняет операторы FLUSH TABLES или DDL для таблицы обработчика.

  • Сессия, в которой открыт обработчик, выполняет не-HANDLER операторы, использующие таблицы.

Оператор TRUNCATE TABLE для таблицы закрывает все обработчики этой таблицы, открытые с помощью оператора HANDLER OPEN.

Если таблица сброшена с помощью FLUSH TABLES tbl_name WITH READ LOCK и открыта с помощью HANDLER, обработчик неявно сбрасывается и теряет свою позицию.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/handler.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API