sql >> Base de Datos >  >> RDS >> Mysql

MIN/MAX vs ORDEN POR y LIMIT

En el peor de los casos, donde está viendo un campo no indexado, usando MIN() requiere un solo pase completo de la mesa. Usando SORT y LIMIT requiere un clasificador de archivos. Si se ejecuta en una tabla grande, es probable que haya una diferencia significativa en el rendimiento percibido. Como dato anecdótico, MIN() tomó .36s mientras SORT y LIMIT tomó .84 contra una tabla de 106,000 filas en mi servidor de desarrollo.

Sin embargo, si está mirando una columna indexada, la diferencia es más difícil de notar (el punto de datos sin sentido es 0.00s en ambos casos). Sin embargo, mirando el resultado de la explicación, parece que MIN() es capaz de extraer simplemente el valor más pequeño del índice (filas 'Seleccionar tablas optimizadas' y 'NULL') mientras que SORT y LIMIT todavía necesita hacer un recorrido ordenado del índice (106,000 filas). El impacto real en el rendimiento es probablemente insignificante.

Se parece a MIN() es el camino a seguir:es más rápido en el peor de los casos, indistinguible en el mejor de los casos, es SQL estándar y expresa más claramente el valor que está tratando de obtener. El único caso en el que parece que usar SORT y LIMIT sería deseable sería, como mson mencionado, donde está escribiendo una operación general que encuentra los valores N superiores o inferiores de columnas arbitrarias y no vale la pena escribir la operación de caso especial.