Sintaxe HANDLER
A instrução HANDLER
fornece acesso direto a interface do mecanismo de armazenamento de tabelas MyISAM
.
A primeira forma da instrução HANDLER
abre uma tabela, tornando a acessível através de subsequentes instruções HANDLER ... READ
. Este objeto de tabela não é copartilhada com outras threads e não serão fechadas até que as chamadas de thread HANDLER nome_tabela CLOSE
ou a thread termine.
A segunda forma busca um registro (ou mais, especificado pela cláusula LIMIT
) onde o índice especificado satisfaz os valores dados e a condição WHERE
é encontrada. Se você tiver um índice multi-coluna, especifique as colunas do índice como uma lista separadas por vírgulas. Especifique o valor de todas as colunas no índice, ou especifique valores para o prefixo mais a esquerda das colunas índices. Suponha que um índice inclui três colunas chamadas col_a
, col_b
, e col_c
, nesta ordem. A instrução HANDLER
pode especificar valores para todas as três colunas no índice, ou para as colunas no prefixo mais a esquerda. Por exemplo:
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) ...
A terceira forma busca uma linha (ou mais, especificado pela cláusula LIMIT
) da tabela na ordem do índice, correspondendo a condição WHERE
.
A quarta forma (sem especificação de índice) busca um registro (ou mais, especificado pela cláusula LIMIT
) da tabela na ordem natural da linhas (como armazenado no arquivo de dados) de acordo com a condição WHERE
é mais rápido que HANDLER nome_tabela READ nome_indice
quando é necessária uma varredura completa da tabela.
HANDLER ... CLOSE
fecha uma tabela que foi aberta com HANDLER ... OPEN
.
Nota: Se você estiver utilizando a interface HANDLER
para PRIMARY KEY
você deve se lembrar de colocar o nome entre aspas: HANDLER tbl READ `PRIMARY` > (...)
HANDLER
é uma instrução de baixo nível. Por exemplo, ela não fornece consitência. Isto é, HANDLER ... OPEN
NÃO pega uma imagem instântanea da tabela, e NÃO trava a tabela. Isto significa que depois que um HANDLER ... OPEN
é feito, os dados da tabela podem ser modificados (por esta ou outra thread) e estas modificações podem aparecer apenas parcialmente nas buscas HANDLER ... NEXT
ou HANDLER ... PREV
.
As razões para se utilizar esta interface em vez do SQL normal são:
- Ela é mais rápida que
SELECT
porque:- Um mecanismo de armazenamento designado é alocado pela thread em
HANDLER OPEN
. - Existe menos análise envolvida.
- Nào existe sobrecaga de otimização e verificação de consultas.
- A tabela utilizada não precisa estar travada em pedidos de dois handlers.
- A interface handler não precisa fornecer uma aprência consistente dos dados (por exemplo, dirty-reads são permitidas), assim o mecanismo de armazenamento pode fazer otimizações que o SQL normalmente não permite.
- Um mecanismo de armazenamento designado é alocado pela thread em
- É muito mais fácil portar aplicações que usam interface como ISAM para o MariaDB.
- Ele permite se fazer uma travessia em um banco de dados de uma maneira que não é facil (em alguns casos impossível) de fazer com SQL. A interface handler é um modo mais natural de mostrar dados ao trabalhar com aplicações que fornecem uma interface interativa com o usuário para o banco de dados.