una - optimizar consultas mysql explain
¿MySQL puede usar múltiples índices para una sola consulta? (2)
Clásicamente, MySQL puede usar un índice por referencia de tabla en una consulta determinada. Sin embargo, en versiones más recientes de MySQL, se puede llevar a cabo una operación denominada index merge
permite a MySQL usar más de un índice por tabla.
http://openquery.com/blog/mysql-50-index-merge-using-multiple-indexes
Imagine una tabla con varias columnas, por ejemplo, id, a, b, c, d, e
. Normalmente selecciono por id
, sin embargo, hay múltiples consultas en la aplicación cliente que usa varias condiciones sobre subconjuntos de las columnas.
Cuando MySQL ejecuta una consulta en una sola tabla con múltiples condiciones WHERE en múltiples columnas, ¿realmente puede hacer uso de los índices creados en diferentes columnas? ¿O la única forma de hacerlo rápido es crear índices de varias columnas para todas las consultas posibles?
Sí, MySQL puede usar múltiples índices para una sola consulta. El optimizador determinará qué índices beneficiarán a la consulta. Puede usar EXPLAIN
para obtener información sobre cómo MySQL ejecuta una declaración. Puede agregar o ignorar índices usando sugerencias como estas:
SELECT * FROM t1 USE INDEX (i1) IGNORE INDEX FOR ORDER BY (i2) ORDER BY a;
Sugeriría leer sobre cómo MySQL usa índices .
Solo algunos extractos:
Si hay una opción entre múltiples índices, MySQL normalmente usa el índice que encuentra el menor número de filas.
Si existe un índice de varias columnas en col1 y col2, las filas apropiadas se pueden recuperar directamente. Si existen índices independientes de columna única en col1 y col2, el optimizador intentará utilizar la optimización de combinación de índices (consulte la Sección 8.3.1.4, "Optimización de combinación de índices") o intentará encontrar el índice más restrictivo al decidir qué índice encuentra menos filas y usando ese índice para buscar las filas.