赞
踩
SQL中ORDER BY相同值结果乱序的具体原因
1、查阅了Goole和相关资料,大概总结了这种情况的原因。其实发生这种现象是“故意”设计的。
2、如果没有指定ORDER BY语句,则SQL Server(或任何RDBMS)不保证以特定顺序返回结果。 有些人认为,如果没有指定order by子句,行总是以聚簇索引顺序或物理磁盘顺序返回。 然而,这是不正确的,因为在查询处理期间可以改变行顺序的许多因素,例如并行的HASH连接是更改行顺序的操作符的一个很好的例子。
3、如果指定ORDER BY语句,SQL Server将对行进行排序,并按请求的顺序返回。 但是,如果该顺序不是确定性的,即可能有重复的值,则在每个具有相同值的组中,由于与上述相同的原因,该顺序是“随机的”。
4、确保确定性顺序的唯一方法是在ORDER BY子句中包含保证的唯一列或列组(例如主键)。
总结
为了避免类似的问题,我们可以将主键(或者具有唯一性的字段)排序引入需要排序的业务字段后。
例如:在根据创建时间查询数据的时候,最好在其后面再加上一个唯一的排序字段,你可以是升序也可以是降序,根据你具体的需求而定.
案例如下:
select * from people p where p.city = "北京市" order by p.create_time desc,p.id asc limit 0,10
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。