En el estado MYSQL, el valor Handler_read_rnd_next es muy alto.
Soy consciente de que este valor se incrementará cuando se ejecute una consulta que no tenga los índices adecuados.
Pero, incluso cuando ejecutamos el estado del show como 'Handler_read_rnd_next', este valor se incrementa en 2.
Según este indicador de estado, estamos monitoreando algunas estadísticas.
Así que cada vez, estas estadísticas se muestran críticas.
¿Podemos excluir estos recuentos de ejecución 'show' del recuento 'Handler_read_rnd_next'?
Un ejemplo más de esto,
Hay una tabla con 10 filas, la tabla está indexada en la columna 'datos', y si ejecutamos la siguiente consulta:
select data from test where data = 'vwx' -> returns one row
y si verificamos el valor de 'Handler_read_rnd_next', se incrementará en 7.
El siguiente es el resultado del comando de explicación para la consulta anterior:
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'
¿Hay alguna forma de restringir este valor o puedo saber por qué este valor se incrementa muy rápido?
fuente
Respuestas:
En primer lugar, veamos la definición de Handler_read_rnd_next.
De acuerdo con la documentación de MySQL en Handler_read_rnd_next:
Ahora, mira tu consulta:
Dijiste que la tabla tiene 10 filas. Como regla general, MySQL Query Optimizer descartará el uso de un índice si el número de filas que necesita ser examinado es mayor al 5% del número total de filas.
Hagamos los cálculos. El 5% de 10 filas es 0.5 filas. Incluso si el número de filas necesita ubicar sus datos es 1, eso es mayor que 0.5. Basado en este número menor de filas y la regla de índice que acabo de mencionar, MySQL Query Optimizer siempre hará un escaneo de tabla.
Dado que la columna
data
está indexada, en lugar de un escaneo de tabla, mysql realizó un escaneo de índice.Si sabe con certeza que la tabla de prueba nunca crecerá, puede eliminar todos los índices y permitir que se realicen escaneos de la tabla. Las variables de estado del controlador deberían dejar de aumentar.
fuente
¿Qué versión de MySQL?
Las razones por las que este indicador se incrementa se documenta mejor aquí: http://www.mysqlperformanceblog.com/2010/06/15/what-does-handler_read_rnd-mean/
En resumen, es solo el contador del número de filas obtenidas en orden durante un escaneo de tabla completo o parcial.
Ahora, dicho eso, estoy obteniendo un resultado diferente:
fuente
Si hay un índice único / primario en la columna "datos", entonces ya ha realizado la optimización para esta consulta. No puedo pensar que se pueda hacer una mayor optimización en esto.
¿También puede verificar si se ha realizado un ESCANEO DE TABLA COMPLETA o no?
Asegúrese de que select_scan no haya aumentado su valor, de esta manera puede verificar si se ha realizado o no la EXPLORACIÓN DE TABLA COMPLETA. Debe intentar optimizar una consulta que no realice la EXPLORACIÓN DE TABLA COMPLETA.
fuente