Tengo una tabla de 200k entradas con columnas de INT. Quiero crear un índice para hacer las consultas más rápido. Esta es la consulta que me gustaría ejecutar: SELECT A,B,C,D,E FROM table WHERE A=23 and (B=45 or C=43)
. Creé los siguientes índices: B
, ACD
, C
, ABC
. Con el comando EXPLAIN
encontré que MySQL elige el índice ACD
. Así que seguí poblando la tabla con más valores y me di cuenta de que MySQL estaba cambiando entre los índices anteriores (no siempre el mismo).MySQL. Crear un índice para consultas "O"
Dado que hay muchos insertos, tener varios índices causará problemas de rendimiento y podemos suponer que se accede a esta tabla mediante otras consultas que requieren columnas diferentes donde cada índice tiene sentido.
Conozco el USE INDEX()
, pero me gustaría saber si debemos confiar en MySQL para elegir el índice correcto.
¿Qué quiere decir con "podemos suponer que esta tabla es accedida por otras consultas que requieren columnas diferentes donde cada ÍNDICE tiene sentido"? ¿Podría dar algunos ejemplos de tales consultas? ¿También puede darnos el resultado de una consulta 'SHOW INDEXES FROM table'? Los índices en A, AB y AC son ciertamente redundantes: estos ya están cubiertos por los índices en ACD/ABC, ABC y ACD, respectivamente. Puede leer sobre cómo maneja MySQL los índices de varias columnas en http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html – Daan
Consulta de ejemplo: 'OBTENER B DE LA tabla WHERE B = 12'. Ok, puedo eliminar A, AB, AC (gracias). Pero aún no explica la razón por la que se usa 'ACD'. Cuando 'D' ni siquiera está en la instrucción' WHERE'. –
Sí, eso es un poco misterioso: el resultado de una consulta 'SHOW INDEXES FROM table' puede ayudar a ver por qué está sucediendo :) – Daan