2008-11-04 17 views
6

Tengo una consulta en mi base de datos como tal:rendimiento de varias columnas índices de MySQL cuando se utiliza sólo una columna en una consulta

SELECT * FROM expenses WHERE user_id = ? AND dated_on = ? 

he añadido un índice para la tabla en ambas las user_id y dated_on columnas . Cuando examino los índices utilizando SHOW INDEXES FROM expenses, hay dos líneas - una con un valor de 1 seq_in_index y el otro con un valor de 2. seq_in_index

Mi pregunta es, si a continuación, envía una consulta que utiliza sólo uno de los dos cláusulas WHERE, por ejemplo:

SELECT * FROM expenses WHERE user_id = ? 

¿hay algún beneficio para la creación de otra, que únicamente índices índice de la columna de la user_id, o será el índice user_id/dated_on descrito anteriormente puede usar la misma eficacia?

Por último, ¿qué tal si utilizar la consulta:

SELECT * FROM expenses WHERE dated_on = ? 

¿Cómo el valor de seq_in_index 2 afectan utiliza en el índice y el rendimiento en esta situación?

Respuesta

8

MySQL puede usar any left portion of an index.

En su ejemplo SELECT * FROM expenses WHERE user_id = ? usará el índice pero SELECT * FROM expenses WHERE dated_on = ? no lo hará.

Para un índice de 3 columnas A, B, C, WHERE A = ? AND B = ? utilizará un índice sobre A y B, pero WHERE A = ? AND C = ? sólo utilizará un índice en una

5

Si su índice en user_id y dated_on está realmente en ese orden (user_id primero), también se usará para una consulta de user_id. Puede verificar utilizando EXPLAIN para ver la estrategia real de la consulta.

+1

estoy realmente interesado en saber cómo los cambios en el valor seq_in_index el rendimiento de la consulta, así que he editado la pregunta en consecuencia – Olly

Cuestiones relacionadas