Spec-Zone .ru
спецификации, руководства, описания, API
|
HANDLERtbl_name
OPEN [ [AS]alias
]HANDLERtbl_name
READindex_name
{ = | <= | >= | < | > } (value1
,value2
,...) [ WHEREwhere_condition
] [LIMIT ... ]HANDLERtbl_name
READindex_name
{ FIRST | NEXT | PREV | LAST } [ WHEREwhere_condition
] [LIMIT ... ]HANDLERtbl_name
READ { FIRST | NEXT } [ WHEREwhere_condition
] [LIMIT ... ]HANDLERtbl_name
CLOSE
HANDLER
оператор обеспечивает прямой доступ к табличным интерфейсам механизма
хранения. Это доступно для InnoDB
и MyISAM
таблицы.
HANDLER ... OPEN
оператор открывает таблицу, делая это доступное последующее
использование HANDLER ... READ
операторы. Этот табличный объект не совместно
используется другими сеансами и не закрывается до вызовов сеанса HANDLER ... CLOSE
или сеанс завершается. Если Вы открываете таблицу, используя псевдоним, дальнейшие ссылки на открытую таблицу с
другим HANDLER
операторы должны использовать псевдоним, а не имя таблицы.
Первое 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
когда полное сканирование таблицы требуется. Естественный порядок строк является порядком, в котором строки
сохранены в a tbl_name
READ index_name
MyISAM
табличный файл данных. Этот оператор работает на InnoDB
таблицы также, но нет такого понятия, потому что нет никакого отдельного
файла данных.
Без a LIMIT
пункт, все формы HANDLER ... READ
выберите
единственную строку, если Вы доступны. Чтобы возвратить определенное число строк, включайте a LIMIT
пункт. У этого есть тот же самый синтаксис что касается SELECT
оператор. См. Раздел
13.2.9,"SELECT
Синтаксис".
HANDLER ... CLOSE
закрывает таблицу, которая была открыта с HANDLER
... OPEN
.
Есть несколько причин использовать HANDLER
интерфейс вместо нормального SELECT
операторы:
HANDLER
быстрее чем SELECT
:
Определяемый объект-обработчик механизма хранения выделяется для HANDLER ... OPEN
. Объект снова используется для последующего
HANDLER
операторы для той таблицы; это не должно быть повторно
инициализировано для каждого.
Там менее анализирует включенный.
Нет никакого оптимизатора или проверяющих запрос издержек.
Интерфейс обработчика не должен обеспечить непротиворечивый вид данных
(например, грязные
чтения разрешаются), таким образом, механизм хранения может использовать оптимизацию
что SELECT
обычно не разрешает.
HANDLER
облегчает портировать на приложения MySQL,
которые используют низкий уровень ISAM
- как интерфейс. (См. Раздел
14.2.9, "Интеграция InnoDB с memcached" для альтернативного способа адаптировать
приложения, которые используют парадигму хранилища значения ключа.)
HANDLER
позволяет Вам пересечь базу данных способом,
который является трудным (или даже невозможным) выполнять с SELECT
. HANDLER
интерфейс является более
естественным способом смотреть на данные, работая с приложениями, которые обеспечивают интерактивный
пользовательский интерфейс для базы данных.
HANDLER
несколько низкоуровневый оператор. Например, это не обеспечивает
непротиворечивость. Таким образом, HANDLER ... OPEN
не берет снимок таблицы, и не
блокирует таблицу. Это означает что после a HANDLER ... OPEN
заявление делается,
табличные данные могут быть изменены (текущим сеансом или другими сеансами), и эти модификации могли бы быть
только частично видимыми к HANDLER ... NEXT
или HANDLER ...
PREV
сканирования.
Открытый обработчик может быть закрыт и отмечен для, вновь открываются, когда обработчик теряет свою позицию в таблице. Это происходит, когда оба из следующих обстоятельств являются истиной:
Любой сеанс выполняется FLUSH
TABLES
или операторы DDL на таблице обработчика.
Сеанс, в котором обработчик открыт, выполняется не -HANDLER
операторы то использование таблицы.
TRUNCATE TABLE
поскольку таблица закрывает все обработчики для таблицы, которые
были открыты с HANDLER OPEN
.
Если таблица сбрасывается с FLUSH TABLES
был открыт с tbl_name
WITH READ LOCKHANDLER
, обработчик неявно сбрасывается и теряет свою позицию.
В предыдущих версиях MySQL, HANDLER
не поддерживался с разделенными таблицами. Это
ограничение удаляется, начинаясь с MySQL 5.7.1.