¿Cuándo es el momento adecuado para usar la declaración SQL? "SELECCIONE [resultados] DESDE [tablas] DONDE [las condiciones] SOLO FETCH [n] SOLAMENTE LAS FILAS"

StackOverflow https://stackoverflow.com/questions/400575

  •  03-07-2019
  •  | 
  •  

Pregunta

No estoy seguro de que al seleccionar solo un cierto número de filas sea mejor que simplemente hacer una declaración de selección más específica. Tengo la sensación de que me estoy perdiendo algo bastante sencillo pero no puedo entenderlo. Tengo menos de 6 meses de experiencia con cualquier SQL y ha sido superficial, así que lo siento si esta es una pregunta realmente simple pero no pude encontrar una respuesta clara.

¿Fue útil?

Solución

Sé de dos usos comunes:

Paginación: asegúrese de especificar un pedido. Si no se especifica un pedido, muchas implementaciones de db usan lo que sea conveniente para ejecutar la consulta. Este " óptimo " El comportamiento de pedido podría dar resultados muy impredecibles.

SELECT top 10 CustomerName
FROM Customer
WHERE CustomerID > 200 --start of page
ORDER BY CustomerID

Subconsultas: muchos lugares donde se puede emitir una subconsulta requieren que el resultado sea un solo valor. top 1 es más rápido que el máximo en muchos casos.

--give me some customer that ordered today
SELECT CustomerName
FROM Customer
WHERE CustomerID =
(
  SELECT top 1 CustomerID
  FROM Orders
  WHERE OrderDate = @Today
)

Otros consejos

La paginación personalizada, normalmente.

Estamos utilizando la declaración por las siguientes razones:

  1. Muestra solo los resultados más relevantes (por ejemplo, los 100 primeros) sin tener que transferir todas las filas del DB al cliente. En este caso, también usamos ORDER BY.

  2. Solo queremos saber si hay filas coincidentes y tenemos algunos ejemplos. En este caso, no ordenamos los resultados y, nuevamente, FETCH FIRST es mucho más barato que tener el DB preparado para transferir muchas filas y luego tirarlas al cliente. Esto ocurre generalmente durante el desarrollo de software cuando es necesario tener una idea de si un determinado SQL es correcto.

Cuando desee mostrar los valores a un usuario, es probable que solo necesite N filas. En general, el servidor de la base de datos puede recuperar las primeras N filas, más rápido de lo que puede recuperar todas las filas, por lo que el rediseño de la pantalla puede ir un poco más rápido.

Oracle incluso tiene una pista, llamada FIRST_ROWS, que sugiere que recuperar los datos rápidamente, es más importante que recuperarlos de manera eficiente.

Los diseñadores de SQL están de acuerdo con usted, por lo que el estándar de SQL no incluye top / limit / fetch primero, etc.

Piense en los resultados de búsqueda de Google y en el número de páginas que hay normalmente para los resultados.

Aunque obviamente, hay mucho más en su caso, pero esa es la idea.

Aparte de la paginación, cada vez que desee la fila más o menos [insertar métrica aquí] de una tabla, ordenar en [cualquier métrica] y limitar a 1 fila es, IME, mejor que hacer una subconsulta usando MIN / MAX. Podría variar según el motor.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top