2010-12-11 25 views
5

Cuál es mejor en SQL Server 2008 o no importa ya que la base de datos se optimiza.SQL máximo fila de una tabla

SELECT * FROM table 
WHERE datecolumn = (SELECT max(datecolumn) FROM table); 


SELECT TOP 1 * FROM table ORDER BY datecolumn DESC; 
+3

Podrían producir resultados diferentes. El ejemplo superior puede devolver más de una fila (básicamente, cada fila que coincida con la fecha más grande). La consulta inferior solo devuelve 1 fila (y no hace nada sobre las fechas de empate) – Sparky

Respuesta

9

Al observar el plan de ejecución de SQL real para estas consultas, se obtiene exactamente el mismo plan de ejecución y el mismo costo de ejecución. Sin embargo, puede diferir dependiendo de la configuración del índice y las estadísticas recopiladas, por lo tanto, lo mejor es hacer el control usted mismo.

Una cosa a tener en cuenta es que las dos consultas pueden no devolver el mismo resultado. El segundo SQL siempre devolverá un registro donde el primer registro puede devolver varias filas si datecolumn no es único.

0

Necesita ver el plan de ejecución de la respuesta.

0

SELECCIONAR * FROM tabla WHERE datecolumn = (SELECCIONAR tabla max (datecolumn) FROM);

SELECCIONAR ARRIBA 1 * DE la tabla ORDENAR por fechacolumna DESC;

estas consultas devolverán el resultado de la diferencia en el costo. desde el plan de ejecución del servidor sql la primera consulta. la consulta secundaria se ejecutará primero y escaneará las tuplas de la tabla y obtendrá la fecha máxima de la columna , luego de eso la consulta externa escaneará la tabla y buscará datcolumn = ..... de esta forma no es la eficiencia.

segunda consulta es más eficiente porque hay una sola exploración de las tuplas de la tabla al mismo tiempo.

para nota: si la columna de datos es una clave principal o una columna de índice, no hay una diferencia significativa de ambas consultas. pero si esta columna no es un índice y una clave principal, puede variar significativamente en un costo

Cuestiones relacionadas