¿Por qué los resultados de una consulta SQL no vuelven en el orden esperado?

Si los elementos se insertan en una tabla y luego escribo una consulta, como select * from table, ¿por qué los resultados no están en el orden que espero?

preguntado el 12 de junio de 12 a las 16:06

@philipxy Esa pregunta es específica del motor RDBMS, aunque no es necesario que lo sea, y aquellos que buscan de manera más general no la encontrarán. (La pregunta más general, stackoverflow.com/questions/1793147/… , no está preguntando por qué cambió el orden.) -

2 Respuestas

El orden de una consulta se puede forzar utilizando una cláusula 'Ordenar por' en la instrucción. Una base de datos SQL en realidad no comprende en qué orden coloca las cosas ni almacena los datos en un orden determinado. Esto significa que debe decirle a SQL en qué orden desea los elementos. Por ejemplo:

Select * from Table
  order by column1 desc

Piense en ello como darle algunas cosas a su amiga para que las guarde; ella las tendrá todas para usted más tarde, pero las guarda en algún lugar mientras tanto. Es posible que lo mueva mientras usted no busca dejar espacio para otra cosa, o puede devolvérselo en el mismo orden en que se lo dio, pero no le dijo que lo mantuviera en orden, por lo que no lo hará. .

Las bases de datos deben poder mover cosas en segundo plano, por lo que la forma en que están construidas no conoce intrínsecamente ningún orden: debe conocer el orden cuando se lo da a la base de datos, para que pueda volver a colocarlo en el orden que desee más tarde. La cláusula de orden le permite a SQL imponer un orden en los datos, pero no recuerda ni tiene uno propio.

Punto importante: Incluso cuando SQL devolvió los elementos en el orden correcto sin una orden por instrucción el último millón de veces, no garantiza que lo hará. Incluso si existe un índice agrupado en la tabla, no se garantiza que los resultados se devuelvan en el orden esperado. ¡Especialmente cuando las versiones de SQL cambian, no usar explícitamente una cláusula order by puede romper los programas que asumen que la consulta estará en el orden que ellos quieren!

Respondido el 12 de junio de 12 a las 16:06

Me gusta el "Punto importante": ¡es fundamental comprenderlo si desea evitar errores extraños en el futuro! - Simon

+1 - Buena respuesta concisa. Tantas preguntas sobre el "orden de inserción" últimamente. - Lamak

Si podemos comenzar a fusionarlos en esta pregunta a partir de ahora, y no tener buenas respuestas a la misma pregunta en un millón de lugares, ¡sería genial! - david manheim

Si entendí esto correctamente, puede haber algunos efectos secundarios: si solicito los primeros 100 elementos en una consulta sin especificar ningún criterio de clasificación, luego solicito los siguientes 100, pueden aparecer algunas filas en ambas solicitudes, ya que el orden no está garantizado . ¿Tengo razón? - Ignacio Segura

@IgnacioSegura - Correcto, siempre que sean dos consultas separadas. - david manheim

Es un error común esperar resultados en el orden en que se insertan. Incluso cuando se utiliza un índice agrupado, es posible que el conjunto de resultados no sea el esperado. La única forma de forzar un pedido es utilizar una cláusula de "pedido por". La razón por la que el pedido es diferente de lo esperado puede variar. La consulta puede ejecutarse en paralelo y el conjunto de resultados puede fusionarse o puede deberse al plan de optimización de consultas al intentar devolver el conjunto de resultados lo más rápido posible.

Respondido el 12 de junio de 12 a las 16:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.