Quizás alguien me explique esto, pero cuando consulta una tabla de datos de Oracle, donde existen múltiples registros para una clave (digamos una ID de cliente), el registro que aparece primero para ese cliente puede variar si no hay una instrucción implícita de "orden por" que impone el orden, por ejemplo, un campo alternativo, como un tipo de transacción. Por lo tanto, ejecutar la misma consulta en la misma tabla podría generar un orden de registro diferente al de hace 10 minutos.Oracle SQL devuelve las filas de forma arbitraria cuando no se utiliza ninguna cláusula "order by"
Por ejemplo, una carrera podría Rendimiento:
Cust_ID, TRANSACTION_TYPE
123 A
123 B
A menos que una "orden por TRANSACTION_TYPE" cláusula se utiliza, Oracle podría arbitrariamente devolver el siguiente resultado la siguiente tiempo de la consulta se ejecuta:
Cust_ID, TRANSACTION_TYPE
123 B
123 A
Supongo que tenía la impresión de que había una ordenación predeterminada de las filas en Oracle que (tal vez) reflejaba el orden físico en el medio del disco. En otras palabras, un orden arbitrario que es inmutable y que garantizaría el mismo resultado cuando se vuelva a ejecutar una consulta.
¿Tiene esto que ver con el optimizador y cómo decide dónde recuperar más eficientemente los datos?
Por supuesto, la mejor práctica desde el punto de vista de la programación es forzar cualquier ordenamiento que se requiera, estaba un poco inquieto por este comportamiento.
No sé por qué, pero esta es una observación muy divertida y especialmente la parte "desconcertante" de la misma. :) –
No estás * forzando * ordenar, estás * escogiendo * it. – egrunin