Tengo una tabla con un UNIQUE
índice de varias columnas en _job_id__
y __keyword_id__
.
¿También necesitaría agregar otro índice __job_id__
si tengo una consulta frecuente que realiza una GROUP BY
en esa columna?
(en 100 millones de filas podría tomar un tiempo. Es por eso que pregunto en lugar de hacerlo)
Respuestas:
No, en absoluto !!! MySQL Query Optimizer hará lo correcto si las columnas principales necesarias se encuentran más a la izquierda en el índice. Si creó dicho índice, MySQL Query Optimizer puede optar por nunca usar ese índice si siempre realiza GROUP BY job_id, keyword_id. MySQL Query Optimizer puede o no usar el índice si reúne registros solo por job_id, pero de todos modos tiene un espacio de pérdida de índice redundante.
Si la tabla es MyISAM, hacer un índice de este tipo simplemente hincharía el archivo MYI.
Si la tabla es InnoDB y innodb_file_per_table es 0, hacer un índice de este tipo simplemente aumentaría ibdata1.
Si la tabla es InnoDB y innodb_file_per_table es 1, hacer un índice de este tipo simplemente hincharía el archivo .ibd de la tabla.
En resumen, no necesita hacer ese índice adicional !!!
fuente
Los índices solo pueden acelerar las
group by
operaciones al reducir la clasificación ; esto será más eficiente si el índice utilizado es el índice agrupado o al menos tiene la misma columna inicial que el índice agrupado. En todo esto, supongo que MySQL no tiene el equivalente de unahash group by
operación que generalmente omitiría cualquier beneficio de los índices, tal vez alguien más pueda confirmar esto.Hay un beneficio marginal de tener un índice separado
job_id
suponiendo que es la única columna en lagroup by
cláusula y tampoco lo es el índice agrupado: el índice será más pequeño y, por lo tanto, el escaneo generará menos E / S--EDITAR--
Como un índice contiene todos los campos de clave primaria definidos para la clave de índice agrupado que no están en el índice secundario , un índice
job_id
activado solo será menor que un índice activadojob_id, keyword_id
sikeyword_id
no es parte del índice agrupado.fuente