2009-05-05 14 views

Respuesta

41

No, si no usa "ordenar por", no se le garantiza ningún tipo de pedido. De hecho, no se garantiza que el orden de una consulta a la siguiente sea el mismo. Recuerde que SQL trata con los datos de una manera establecida. Ahora, una implementación de base de datos u otra puede dar órdenes de cierta manera, pero nunca debes confiar en eso.

+1

¿Hay alguna posibilidad de que los registros se devuelvan en el orden del índice agrupado? –

+1

Una muy buena oportunidad, pero no garantizada. Consultas complicadas que involucran uniones, vistas, sub consultas y similares pueden dejar el conjunto de resultados ordenado de manera muy diferente. –

+0

Y puede devolver a veces en el orden de índice agrupado y, a veces no. Siempre use una orden por si desea una orden específica. – HLGEM

6

Cuando hago una selección, ¿siempre se garantiza que mi resultado será ordenado por la clave principal, o debería especificarlo con un 'orden por'?

No, no está garantizado.

SELECT * 
FROM table 

muy probablemente utilizará TABLE SCAN que no utiliza la clave principal en absoluto.

Se puede utilizar una pista:

SELECT /*+ INDEX(pk_index_name) */ 
     * 
FROM table 

, pero incluso en este caso el pedido no está garantizada: si utiliza Enterprise Edition, la consulta puede ser parallelized.

Este es un problema, ya que ORDER BY no se pueden utilizar en una cláusula de subconsulta SELECT y no se puede escribir algo como esto:

SELECT (
     SELECT column 
     FROM table 
     WHERE rownum = 1 
     ORDER BY 
       other_column 
     ) 
FROM other_table 
+0

No hay problema: SELECCIONAR DISTINCT FIRST_VALUE (columna) OVER (ORDER BY other_column) FROM table; –

+0

@Jeffrey: es posible, pero la subconsulta seleccionará todos los FIRST_VALUE y los HASH UNIQUE. Esto matará todo el rendimiento, la subconsulta devuelve muchas filas. – Quassnoi

0

Depende de su base de datos y también depende de campos indexados.

Por ejemplo, en mi tabla Usuarios todos los usuarios tienen un único campo varchar (20): inicio de sesión y clave primaria - id.

Y "Seleccionar * de los usuarios" devuelve el conjunto de filas ordenado por el inicio de sesión.

0

Si desea un pedido específico, especifíquelo específicamente utilizando ORDER BY.

¿Qué pasa si la tabla no tiene la clave principal?

+0

Si la tabla no tiene una clave principal, tiene otros problemas que el orden en que se devuelven los datos. –

+0

total, ¡pero eso no impide que las personas diseñen las tablas mal! – pmcilreavy

0

Si desea que sus resultados en un orden específico, siempre se especifica una orden de

2

No, pedido nunca está garantizado a menos que utilice un ORDER BY.

El orden en que se obtienen las filas depende del método de acceso (por ejemplo, exploración de tabla completa, exploración de índice), los atributos físicos de la tabla, la ubicación lógica de cada fila dentro de la tabla y otros factores. Todo esto puede cambiar incluso si no cambia su consulta, por lo que para garantizar un orden coherente en su conjunto de resultados, ORDER BY es necesario.

Cuestiones relacionadas