Como los otros carteles mencionan, si no especifica un orden de clasificación, el estándar SQL dice que los resultados pueden ser en cualquier orden que el procesador de consultas considere más conveniente y eficiente.
Digamos que hace un simple SELECT desordenado para todas las filas de una tabla CUSTOMER, que no tiene índices ni clave principal. Es bastante posible, e incluso probable, que el procesador de consultas realice un escaneo de tabla directo y produzca las filas en el orden en que se insertaron originalmente (lo que le da el comportamiento FIFO que vio).
Si agrega un índice en los campos ESTADO y CIUDAD (en ese orden), y luego consulta WHERE STATE = 'NY'
, el procesador de consultas puede decidir que es más eficiente escanear las entradas de índice para ESTADO = 'NY' en lugar de una exploración de tabla completa. En este caso, probablemente materialice las filas en orden ESTADO, CIUDAD.
Incluso esto no es seguro. Por ejemplo, si el procesador de consultas ha reunido estadísticas que muestran que casi todos los valores STATE en su tabla son 'NY' (tal vez porque la base de datos es para un negocio de alquiler de equipos basado en Albany), puede decidir que el escaneo de tabla sea más barato que el escaneo de índice, y verá FIFO nuevamente.
Es una buena idea aprender algunos conceptos básicos sobre cómo su base de datos planifica sus consultas. Puede usar la declaración EXPLAIN
para ver cómo su DBMS ejecutaría cualquier consulta dada, y luego usar esto para optimizar su consulta, en algunos casos por órdenes de magnitud. Esta es un área fascinante y útil para aprender.
No es, por definición, * no * orden predeterminado en bases de datos SQL. La mayoría de las bases de datos pueden, y lo harán, devolver registros en un orden diferente según la naturaleza de la consulta o incluso el estado de los índices en el momento en que se ejecuta una consulta similar. Siempre debe especificar siempre el orden en que desea los datos, suponiendo que el orden es importante. Las consultas con un orden no especificado pueden no ser repetibles. –