No status MYSQL, o valor Handler_read_rnd_next é muito alto.
Estou ciente de que esse valor será incrementado quando uma consulta for executada e não tiver índices adequados.
Mas, mesmo quando executamos o status do programa como 'Handler_read_rnd_next', esse valor está sendo incrementado em 2.
Com base nesse sinalizador de status, estamos monitorando algumas estatísticas.
Então, toda vez, essas estatísticas são críticas.
Podemos excluir essas contagens de execução 'show' da contagem de 'Handler_read_rnd_next'.
Mais um exemplo para isso,
Existe uma tabela com 10 linhas, a tabela é indexada na coluna 'data' e, se executarmos a seguinte consulta:
select data from test where data = 'vwx' -> returns one row
e se verificarmos o valor de 'Handler_read_rnd_next', ele será incrementado em 7.
A seguir está o resultado do comando de explicação para a consulta acima:
explain select data from test where data = 'vwx';
id, select_type, table, type, possible_keys, key, key_len, ref, rows, Extra
1, 'SIMPLE', 'test', 'ref', 'data', 'data', '35', 'const', 1, 'Using where; Using index'
Existe alguma maneira de restringir esse valor, ou posso saber por que esse valor está sendo incrementado muito rapidamente.
fonte
Respostas:
Antes de tudo, vejamos a definição de Handler_read_rnd_next.
De acordo com a documentação do MySQL em Handler_read_rnd_next:
Agora, olhe sua consulta:
Você disse que a tabela tem 10 linhas. Como regra geral, o MySQL Query Optimizer descartará o uso de um índice se o número de linhas que precisam ser examinadas for maior que 5% do número total de linhas.
Vamos fazer as contas. 5% de 10 linhas são 0,5 linhas. Mesmo que o número de linhas precise localizar seus dados seja 1, seja maior que 0,5. Com base nesse menor número de linhas e na regra de índice que acabei de mencionar, o MySQL Query Optimizer sempre fará uma varredura de tabela.
Como a coluna
data
é indexada, em vez de uma varredura de tabela, o mysql realizou uma varredura de índice.Se você tiver certeza de que a tabela de teste nunca crescerá, poderá remover todos os índices e permitir que as verificações da tabela aconteçam. As variáveis de status do manipulador devem parar de aumentar.
fonte
Qual versão do MySQL?
As razões pelas quais esse sinalizador é incrementado estão melhor documentadas aqui: http://www.mysqlperformanceblog.com/2010/06/15/what-does-handler_read_rnd-mean/
Em resumo, é apenas o contador do número de linhas buscadas em ordem durante uma verificação de tabela completa ou parcial.
Agora, dito isso, estou obtendo um resultado diferente:
fonte
Se houver um índice Exclusivo / primário na coluna "dados", você já fez a otimização para esta consulta. Não consigo pensar em mais otimizações sobre isso.
Além disso, você pode verificar se a verificação de tabela completa foi feita ou não?
Certifique-se de que select_scan não tenha aumentado seu valor; dessa maneira, você pode verificar se a verificação de tabela completa está concluída ou não. Tente otimizar uma consulta que não fará a verificação de tabela completa.
fonte