2010-11-11 9 views
10

MIN/MAX vs ORDER BY and LIMITSeleccione MAX u Orden Por Límite 1

Para dar seguimiento a esta pregunta: He encontrado algunos resultados muy diferentes de lo que Sean McSomething describe:

que tengo una tabla con filas a unos 300 metros.

Select max(foo) from bar; demora alrededor de 15 seg. para ejecutar

Select foo from bar order by foo desc limit 1; tarda 3 seg. ejecutar

Declaración de Sean "Parece que MIN() es el camino a seguir - es más rápido en el peor de los casos, indistinguible en el mejor de los casos" simplemente no es válido para este caso ... pero no tengo ni idea por qué. ¿Alguien puede ofrecer una explicación?

Editar: Como no puedo mostrar la estructura de la tabla aquí: supongamos que la barra es una tabla en un ndb_cluster sin relaciones, foo es un punto de datos arbitrario sin índice.

+0

Puede proporcionar 'SHOW CREATE TABLE bar' - la indexación, o la clave externa puede afectarlo – Mikhail

+5

Las dos declaraciones SQL que tiene no hacen lo mismo, ¿está seguro de que está probando correctamente? ? Su última afirmación tendría que 'ordenar por foo', no 'ordenar por compás' para que sean los mismos – nos

+0

El tipo de motor también puede desempeñar un papel en el rendimiento de la consulta. –

Respuesta

5

Para evitar un pase completo, agregue un INDEX en la columna foo.

+1

¿Sería la falta de un índice en foo la razón por la cual MAX funciona tan lentamente? ¿Por qué? –

+3

Porque la falta de un índice significa que debe realizarse un pase completo en la mesa. – Vic

+1

Suponiendo que hubiera un índice en foo, ¿'MAX (foo)' o 'ordenar por foo DESC límite 1' sería más rápido? – Programster

0

Tengo una situación similar, el índice en la columna en cuestión, y sin embargo, el orden por & solución límite parece más rápido. ¿Qué tan bueno es eso :)

Cuestiones relacionadas