Si te encuentras con algo que no entiendes puedes comentarlo y trataremos de ayudarte rápidamente.
Solución:
Contestando tus preguntas:
-
Es
possible_keys
los índices que MySQL podría querer usar ykeys
Cuáles son los índices que utiliza realmente MySQL? Si eso es correcto. -
¿Por qué el índice
index_status_mit_spam
¿no utilizado? En la consulta, las columnas tienen el mismo orden que en el índice. sql usa estadísticas en los índices de la tabla para determinar qué índice utilizar. los el orden de los campos en la declaración de selección NO tiene efecto en qué índice usar. Las estadísticas sobre los índices incluyen información como la singularidad del índice y otras cosas. Es probable que se utilicen más índices únicos. Lea más sobre esto aquí: http://dev.mysql.com/doc/innodb/1.1/en/innodb-other-changes-statistics-estimation.html o aquí: http://dev.mysql.com/doc/ refman/5.0/en//myisam-index-statistics.html. Estos factores determinan cómo MySQL seleccione el índice usar. solo usará UN índice. -
¿Por qué el índice
index_datum
no se utiliza para elORDER BY
? MySQL solo usará un índice, no dos, durante una consulta, ya que usar un segundo índice ralentizará aún más la consulta. Leer un índice NO es leer la tabla. Esto está relacionado con la eficiencia operativa de la consulta. Aquí hay respuestas que pueden explicar algunos conceptos: https://dba.stackexchange.com/questions/18528/performance-difference- between-clustered-and-non-clustered-index/18531#18531 O Agregar cláusula de límite a la consulta de MySQL se ralentiza reduce drásticamente los índices de O MySQL y cuándo agruparlos. Estas respuestas tienen muchos detalles que lo ayudarán a comprender la indexación de MySQL. -
¿Cómo puedo optimizar mis índices de tabla o la consulta? (La consulta anterior necesita hasta 3 segundos y tiene alrededor de un millón de entradas en la tabla). Bueno, aquí hay un clasificador de archivos que probablemente lo esté ralentizando. Puede ser que la tabla tenga demasiados índices y MySQL esté seleccionando el incorrecto.
Debe comprender que los índices aceleran las lecturas y ralentizan las escrituras en las tablas. Por lo tanto, solo agregar índices no siempre es una buena idea. Las respuestas y los consejos anteriores deberían ayudarlo a obtener una comprensión sólida.
possible_keys
denota todos los índices de su tabla (keys o columnas de índice)- El optimizador de MySQL decide la mejor manera de EJECUTAR una consulta, puede usar cualquier índice (no necesariamente primario). key), o ninguno
- Para forzar a MySQL a usar o ignorar un índice listado en la columna de posibles_claves, use
FORCE INDEX
,USE INDEX
oIGNORE INDEX
en tu consulta -
Consulte este enlace: http://dev.mysql.com/doc/refman/5.1/en/index-hints.html.
Puede especificar el alcance de una sugerencia de índice agregando una cláusula FOR a la sugerencia. Esto proporciona un control más detallado sobre la selección del optimizador de un plan de ejecución para varias fases del procesamiento de consultas. Para afectar solo a los índices usados cuando MySQL decide cómo encontrar filas en la tabla y cómo procesar uniones, use FOR JOIN. Para influir en el uso del índice para ordenar o agrupar filas, use FOR ORDER BY o FOR GROUP BY. (Sin embargo, si hay un índice de cobertura para la tabla y se usa para acceder a la tabla, el optimizador ignorará las sugerencias de IGNORE INDEX FOR ORDER BY que deshabilitan ese índice).
-
Intente forzar un índice diferente; verifique este enlace con seguridad: ¿casos de uso de MySQL `FORCE INDEX`?
-
Comprender el formato de salida EXPLAIN – http://dev.mysql.com/doc/refman/5.1/en/explain-output.html
Recuerda dar visibilidad a esta noticia si te fue de ayuda.