2011-08-09 10 views
7

Así que siempre pensé que ver "Usar dónde" en la columna Extra era algo bueno. Sin embargo, estaba planeando un almuerzo de bolsa marrón para mis compañeros de trabajo sobre la interpretación de EXPLAIN y ahora no estoy tan seguro. El documento de MySQL dice esto en las notas sobre "Usar dónde":Optimización de MySQL: EXPLAIN La columna "Extra" contiene "Usar dónde"

Una cláusula WHERE se usa para restringir las filas que coinciden con la siguiente tabla o enviar al cliente. A menos que específicamente intente buscar o examinar todas las filas de la tabla, puede tener algo mal en su consulta si el valor Extra no utiliza el lugar y el tipo de combinación de tabla es TODO o índice. Incluso si está utilizando un índice para todas las partes de una cláusula WHERE, puede ver Using Using where si la columna puede ser NULL.

Esto me lleva a pensar que incluso si mi cláusula WHERE sólo contiene partes del índice, que MySQL todavía examinará filas si las columnas pueden tener valores NULL.

¿Es eso cierto? De ser así, ¿debería cambiar las columnas para no incluir NULL si no lo necesito? ¿Veré un aumento de velocidad?

+0

Acabo de hacer una prueba: cambie la columna de nulo a no nulo y luego "using where" desapareció. – tomwang1013

Respuesta

5

Las columnas anulables tienen una sobrecarga, debido a la necesidad adicional de verificar la condición nula. si una columna no tiene que ser nula, o sus requisitos no permiten el nulo, entonces definitivamente haga la columna not null.

En cuanto a los índices, depende de la construcción del índice. Si el índice se define con (a,b,c) y está usando b,c en su cláusula where, este índice no se puede usar porque a no está en juego.

+0

Hola @Marc, gracias por la respuesta. Entiendo cómo funcionan los índices multiparte. Supongo que lo que estoy preguntando es: si tengo una tabla con índice (a, b, c) y una consulta como "seleccione a, b, c de la tabla donde a =? Y b =? Y c =?" y la columna c es anulable, ¿tiene MySQL que inspeccionar cada fila o el índice resuelve la consulta por completo? –

+0

podría filtrar parcialmente en función de a/b, pero aún tiene que trabajar extra con C para comprobar nulos. más eficiente que ningún índice, definitivamente, pero no tan eficiente si las tres columnas no fueran nulas. –

Cuestiones relacionadas