当没有使用ORDER BY时,查询的默认顺序是什么?
发布于 2012-01-06 01:18:34
没有这样的订单。摘自http://forums.mysql.com/read.php?21,239471,239688#msg-239688
当缺少order BY时,
SELECT * FROM tbl --这将执行“表扫描”。如果该表从未进行过任何删除/替换/更新,则记录将碰巧按插入顺序排列,这就是您所观察到的结果。
如果您对InnoDB表执行了相同的语句,则它们将按主键顺序而不是INSERT顺序传递。同样,这是底层实现的工件,而不是依赖的东西。
发布于 2012-01-06 01:11:09
什么都没有。根据您查询的内容和查询的优化方式,您可以获得任何顺序。甚至不能保证两个看起来相同的查询会以相同的顺序返回结果:如果不指定它,就不能依赖它。
发布于 2014-05-21 20:06:06
我发现SQL Server的默认顺序几乎是随机的(取决于数据的年龄和复杂性),这很好,因为它强制您指定所有顺序。
(我依稀记得Oracle在这方面与SQL Server相似。)
默认情况下,MySQL似乎是按照磁盘上的记录结构进行排序的(由于删除和优化,可能会包括无序的条目),但它通常会在一开始就欺骗开发人员,让他们不必使用order-by子句,因为数据似乎默认是主键排序,这种情况是!
我今天惊讶地发现,MySQL 5.6和4.1隐式地对记录进行了子排序,这些记录是在一个列上以有限的分辨率反向排序的。我的一些结果具有相同的排序值,并且整体顺序是不可预测的。例如,在我的例子中,它是一个按日期时间列排序的DESC,一些条目在同一秒内,所以它们不能被显式排序。在MySQL 5.6中,他们以一种顺序(插入顺序)选择,但在4.1中,他们选择向后!这导致了一个非常恼人的部署错误。
我没有找到有关此更改的文档,但找到了notes on on implicit order in MySQL
默认情况下,MySQL按col1、col2、...对所有组进行排序。查询,就好像您指定了ORDER BY col1、col2、...在查询中也是如此。
但是:
MySQL 5.5中不推荐使用隐式GROUP BY sorting的
。要实现分组结果的特定排序顺序,最好使用显式order BY子句。
因此,与其他答案一致-永远不要依赖任何数据库中的默认或隐式排序。
https://stackoverflow.com/questions/8746519
复制相似问题