Me enfrento a lo siguiente y no estoy seguro de cuál es la mejor práctica.¿Dos índices de una sola columna frente a un índice de dos columnas en MySQL?
Tenga en cuenta la siguiente tabla (que conseguirá grande):
Identificación del PK | giver_id FK | recipient_id FK | fecha
Estoy usando InnoDB y por lo que entiendo, crea índices automáticamente para las dos columnas de clave externa. Sin embargo, también estaré haciendo muchas consultas donde necesito hacer coincidir una combinación particular de:
SELECT...WHERE giver_id = x AND recipient_id = t
.
Cada combinación es única en la tabla.
¿Hay alguna ventaja de agregar un índice de dos columnas sobre estas columnas, o los dos índices individuales en teoría serían suficientes/lo mismo?
'MySQL solo puede usar un índice por SELECCIONAR' esto ya no es cierto, sería bueno si editó su respuesta para actualizarse. – Davor
¿Le importaría explicar por qué el índice de cobertura no podría ser utilizado por 'recipient_id'? –
@IvoPereira Los índices de columnas múltiples en MySQL le permiten usar todos los campos en el índice de izquierda a derecha. Por ejemplo, si tiene un 'INDEX (col1, col2, col3, col4)', entonces el índice se aplicará para búsquedas con una cláusula 'WHERE' como' col1 = 'A'' o 'col1 =' A 'AND col2 = 'B'' o' col1 = 'A' AND col2 = 'B' AND col3 = 'C' AND col4 = 'D'', pero este índice en particular no se usará para nada como 'WHERE col2 = 'B' 'o' WHERE col3 = 'C' AND col4 = 'D'' porque los campos de búsqueda no se dejan más en la definición del índice. Debería agregar índices adicionales para cubrir esos campos. – Slicktrick