2011-02-08 14 views
9

Cuando hago un explican en mi consultaDeshacerse de "Uso temporal; Usando filesort"

enter image description here

veo que ha "Uso temporal; Usando filesort" bajo "extra" para la primera fila . Entiendo que esto es malo, pero no sé qué significa exactamente ni cómo solucionarlo.

Si desea ver a mi consulta, he aquí una pregunta más general le pregunté por la misma consulta: MySQL query optimization and EXPLAIN for a noob. Como referencia, la consulta implica 24 tablas y 23 combinaciones.

Mis preguntas ahora son:

  • ¿Qué "Uso temporal" y "Uso de filesort" significa?
  • Suponiendo que son malos, ¿cómo deshacerse de ellos?
+1

Creo que significa que "el optimizador de consultas no puede usar un índice en la tabla para recuperar los datos en el orden final; el conjunto de resultados probablemente sea demasiado grande para la memoria, por lo tanto, los resultados intermedios se almacenarán en un archivo que luego se clasifica ". No es automáticamente malo cuando el DBMS usa archivos temporales y los ordena; puede ser la mejor manera de responder a la consulta (el optimizador cree que es). –

+1

Se trata de utilizar un filesort porque no tiene un índice en los campos de clasificación. Considere agregar un índice en los campos requeridos. Publique sus declaraciones de creación de tablas y la consulta si desea que ayudemos / – Konerak

Respuesta

7

Como ya se dijo, "usar filesort" y "using temporary" no siempre implican un mal rendimiento.

Here son algunas pautas básicas para mejorar el rendimiento de ORDER BY declaraciones. Lo más destacado:

Si desea aumentar la velocidad ORDER BY, verifique si puede obtener MySQL para usar índices en lugar de una fase de clasificación adicional. Si esto no es posible, puede probar las siguientes estrategias:

Aumente el tamaño de la variable sort_buffer_size .

Aumentar el tamaño de la variable read_rnd_buffer_size .

Uso menos RAM por fila declarando columnas solamente tan grande como tienen que ser para contener los valores almacenados en ellos. Por ejemplo, CHAR (16) es mejor que CHAR (200) si los valores nunca superan los 16 caracteres.

primer intento de usar índices (asegúrese de que los campos que está ordenando tienen índices). Tenga en cuenta que aumentar las variables del sistema sort_buffer_size y read_rnd_buffer_size también puede tener un efecto negativo en otras consultas: considere configurarlas específicamente para la sesión que las necesita y dejarlas en forma predeterminada para todas las demás sesiones.

Cuestiones relacionadas