3

请求中没有ORDER BY时mysql如何返回行?

是什么驱动了自然秩序?

显然可以有许多不同的查询,但让我们说一个简单的

select column from table where date < NOW()

4

3 回答 3

3

如果您不指定一个,则没有自然可预测的顺序。

于 2013-10-03T20:25:13.890 回答
1

对此要非常小心。对于所有 SQL,没有定义的隐含顺序。永远不要指望这一点。即使您在某个时间点看到特定行为,这也可能在未来的版本中发生变化,甚至在添加索引时也会发生变化。如果您期待订单并依靠它,请明确指定它。

问题是结果的“自然顺序”通常完全或部分受到数据库引擎使用的访问计划的影响。例如,如果您按 FieldA 进行分组,则结果很有可能(不是保证)将以 FieldA 序列返回。如果您进行非常简单的选择,则结果将按照它们存储在数据库中的顺序排列,这可能是也可能不是 ID 或主键的顺序。如果您没有指定它给数据库引擎的顺序,那么它可以根据它获得结果的方式来执行当时最方便的任何事情。所以确实变得不可预测并且可以改变。

希望我能更好地解释,但试图从观察者的角度传达过程的真正随机性。

于 2013-10-03T20:28:32.127 回答
0

如果查询正在使用索引,它将更喜欢该索引的排序。Group by 强制排序。这就是为什么将 group by 和 order 结合起来会降低性能。

在您的情况下,如果您有日期索引,它可能会按此排序,但很难说它如何处理平局。如需更多信息,请像往常一样解释查询。

当然,对使用的索引进行排序也有一个警告。如果索引位于自动增量字段上并且数据是使用预先指定的 id 添加的,您可能会发现它更喜欢添加数据的顺序。

于 2013-10-04T16:30:41.760 回答