Esta es una pregunta que he tenido para siempre.Índices de MySQL y orden
Por lo que sé, el orden de los índices importa. Entonces, un índice como [first_name, last_name]
no es lo mismo que [last_name, first_name]
, ¿verdad?
Si sólo definir el primer índice, significa que sólo será utilizado para
SELECT * FROM table WHERE first_name="john" AND last_name="doe";
y no para
SELECT * FROM table WHERE last_name="doe" AND first_name="john";
Desde que estoy usando un ORM, no tengo ni idea de qué orden se van a llamar estas columnas. ¿Eso significa que tengo que agregar índices en todas las permutaciones? Eso es factible si tengo un índice de 2 columnas, pero ¿qué sucede si mi índice está en 3 o 4 columnas?
Supongo que SELECCIONAR * FROM tabla WHERE last_name = "doe" Y first_name = "john" no? Si ese es el caso, dado que mi ORM oculta toda la creación de consultas, probablemente tenga que definir los 2 índices ... lo que realmente apesta, porque tengo un índice en 3 columnas para definir ... –
No, has malentendido. DONDE 'last_name' =" doe "Y' first_name' = "john" la consulta usaría cualquiera de los índices ('first_name',' last_name') o ('last_name',' first_name') bien. – ChssPly76
Una pregunta: para una consulta con 2 condiciones AND, ¿es importante, velocidad, si el índice se "revierte" en comparación con las condiciones de la consulta, o no? ¿O depende de la cardinalidad de esas columnas? – Mihai