sql >> Base de Datos >  >> RDS >> Sqlserver

El orden de una instrucción SQL Select sin la cláusula Order By

No, no se puede confiar en ese comportamiento. El orden está determinado por la forma en que el planificador de consultas ha decidido construir el conjunto de resultados. consultas simples como select * from foo_table es probable que se devuelvan en el orden en que se almacenaron en el disco, que puede ser en orden de clave principal o en el orden en que se crearon, o algún otro orden aleatorio. consultas más complejas, como select * from foo where bar < 10 en su lugar, puede devolverse en el orden de una columna diferente, en función de una lectura de índice, o por el orden de la tabla, para un recorrido de tabla. consultas aún más elaboradas, con múltiples where condiciones, group by cláusulas, union s, estarán en el orden que el planificador decida que es más eficiente generar.

El orden podría incluso cambiar entre dos consultas idénticas solo por los datos que han cambiado entre esas consultas. una cláusula "dónde" puede satisfacerse con un escaneo de índice en una consulta, pero las inserciones posteriores podrían hacer que esa condición sea menos selectiva, y el planificador podría decidir realizar una consulta posterior usando un escaneo de tabla.

Para ponerle un punto más fino. Los sistemas RDBMS tienen el mandato de brindarle exactamente lo que pediste, de la manera más eficiente posible. Esa eficiencia puede tomar muchas formas, incluida la minimización de IO (tanto al disco como a través de la red para enviarle datos), minimizando la CPU y manteniendo pequeño el tamaño de su conjunto de trabajo (utilizando métodos que requieren un almacenamiento temporal mínimo).

sin ORDER BY cláusula, no habrá preguntado exactamente para un orden en particular, por lo que el RDBMS le dará esas filas en algún orden que (tal vez) se corresponda con algún aspecto coincidente de la consulta, según el algoritmo que el RDBMS espera que produzca los datos más rápido.

Si te preocupa la eficiencia, pero no el orden, salta el ORDER BY cláusula. Si te preocupa el orden pero no la eficiencia, usa el ORDER BY cláusula.

Ya que realmente te preocupas por AMBOS usa ORDER BY y luego ajuste cuidadosamente su consulta y base de datos para que sea eficiente.