¿Cuál es el orden predeterminado de una consulta cuando no se utiliza ORDER BY
?SQL: ¿Cuál es el orden por defecto de las consultas?
Respuesta
No hay ninguno. Dependiendo de lo que consulte y cómo se optimizó su consulta, puede obtener cualquier orden. Ni siquiera hay garantía de que dos consultas que parezcan iguales devolverán resultados en el mismo orden: si no lo especifica, no puede confiar en él.
, si conoce el motor y los índices existentes, puede predecir el orden =) – newtover
@newtover true, pero agregar 'ORDER BY' es mucho más fácil que predecir el plan de consulta y recordar el diseño físico que sugiero pegar a la primera :) Encantado de conocerte aquí, de todos modos. – alf
predecir el orden es bastante útil cuando un pedido explícito puede dar lugar a tablas temporales y archivos comprimidos, aunque el orden requerido ya está allí. Sin embargo, explícito es mejor que implícito. Encantado de conocerte también :) – newtover
No hay tal orden presente. Tomado de http://forums.mysql.com/read.php?21,239471,239688#msg-239688
No dependa de orden cuando ORDER BY no se encuentra.
Siempre especifique ORDER BY si desea un pedido en particular; en algunas situaciones, el motor puede eliminar el ORDER BY porque hace algún otro paso.
- GRUPO POR fuerzas ORDENAR POR. (Esta es una violación de la norma Esto puede ser evitado mediante el uso de ORDER BY NULL..)
SELECT * FROM tbl
- esto va a hacer un "recorrido de tabla". Si la tabla tiene nunca tuvo DELETE/REPLACE/UPDATEs, los registros serán en el orden de inserción, de ahí lo que observó.Si hubiera hecho la misma declaración con una tabla InnoDB, se hubieran entregado en orden PRIMARY KEY, no en INSERTAR. De nuevo, esto es un artefacto de la implementación subyacente, no depende de .
Gran respuesta, y está en armonía con http: //dba.stackexchange. com/q/6051/877 ya que no existe garantía entre los motores de almacenamiento y entre versiones de que un pedido esté predeterminado en absoluto. +1 !!! – RolandoMySQLDBA
El orden predeterminado dependerá de los índices utilizados en la consulta y en qué orden se utilizan. Puede cambiar a medida que los datos/estadísticas cambian y el optimizador elige diferentes planes.
Si desea que los datos en un orden específico, utilice ORDER BY
que he encontrado de SQL Server a ser casi al azar en su orden predeterminado (dependiendo de la edad y la complejidad de los datos), lo cual es bueno, ya te obliga a especificar todos los pedidos.
(Recuerdo vagamente Oracle es similar a SQL Server a este respecto.)
MySQL por defecto parece a la orden por la estructura de registro en el disco, (que puede incluir entradas fuera de la secuencia debido a supresiones y optimizaciones), pero a menudo engaña a los desarrolladores para que no se molesten en utilizar cláusulas de orden de compra porque los datos parecen predeterminados para el orden de clave primaria, que es no el caso!
Me sorprendió descubrir hoy, que MySQL 5.6 y 4.1 registros de sub pedidos implícitos que se han ordenado en una columna con una resolución limitada en la dirección opuesta. Algunos de mis resultados tienen valores de orden idénticos y el orden general es impredecible. p.ej. en mi caso, se trataba de un DESC ordenado por una columna de fecha y hora y algunas de las entradas estaban en el mismo segundo, por lo que no se podían ordenar explícitamente. En MySQL 5.6 seleccionan en un orden (el orden de inserción), pero en 4.1 seleccionan al revés. Esto condujo a un error de implementación muy molesto.
me encontré have't documentación sobre este cambio, pero encontré notes on on implicit group order in MySQL:
Por defecto, MySQL ordena todo GROUP BY col1, col2, ... consultas, si ha especificado ORDER BY col1, col2, ... en la consulta también.
Sin embargo:
Basándose en GRUPO implícita mediante la clasificación en MySQL 5.5 está en desuso. Para lograr un orden de clasificación específico de resultados agrupados, es preferible usar una cláusula ORDER BY explícita.
De acuerdo con las otras respuestas, nunca confíe en el orden predeterminado o implícito en cualquier base de datos.
- 1. SQL anexar las consultas
- 2. SQL Orden por el conde
- 3. Consultas SQL máximas por página
- 4. Orden de los resultados de consultas recursivas en SQL 2005
- 5. ¿Por qué las consultas SQL FullText se ralentizan cuando O?
- 6. Linq Donde contiene ... Mantener el orden por defecto
- 7. ¿Por qué importa el orden de las consultas de medios en CSS?
- 8. ¿Cuál es el punto en las funciones por defecto en C++ 11?
- 9. ¿cuál es el riesgo de "ad hoc consultas distribuidas"
- 10. SQL Orden de encargo Por
- 11. ORDEN DE SQL POR consulta
- 12. Ruby: ¿Cuál es el orden de las claves/valores devueltos por los métodos Hash.keys y Hash.values?
- 13. SQL GROUP BY con "valores por defecto"
- 14. orden por defecto de MySQL depende de dónde
- 15. ¿Cuál es el propósito de las vistas en SQL?
- 16. ¿Cuál es el significado SQL de 0x5E5B7D7E?
- 17. Grupo SQL con orden por
- 18. ¿Cuál es el orden predeterminado de una lista devuelta por una llamada de filtro de Django?
- 19. ¿Son seguras las consultas multilínea sql-injection?
- 20. T-SQL - función con parámetros por defecto
- 21. TSQL: ¿Cuál es el orden correcto para unir tablas?
- 22. ¿Cuál es el mejor tutorial SQL en línea para aprender a escribir complejas consultas de informes?
- 23. ¿Cuál es el orden de ejecución de las diferentes partes de una declaración de selección de SQL?
- 24. ¿Cuál debe ser el tamaño del icono lanzador por defecto
- 25. SQL - ¿Importa el orden de DONDE las condiciones?
- 26. ¿Cómo se miden las "consultas por segundo"?
- 27. orden SQL por el valor más alto de dos columnas
- 28. ¿Es privado un campo C# por defecto?
- 29. SQL - ordenado por orden de la lista
- 30. valores separados por comas con consultas SQL
Creo que depende del motor de almacenamiento y los índices potencialmente. – smp7d
Se pueden encontrar respuestas útiles en preguntas similares, como [la mejor práctica de SQL para manejar el orden de clasificación predeterminado] (http://stackoverflow.com/questions/1793147/sql-best-practice-to-deal-with-default-sort -order) y [orden de fila de MySQL para "SELECT * FROM table_name;"] (http://stackoverflow.com/questions/1949641/mysql-row-order-for-select-from-table-name). – Wiseguy