数据库使用order by排序乱序的问题

数据库使用order by排序乱序的问题,第1张

数据分页时需要根据数据记录创建时间create_time字段倒序,即使用order by create_time desc,但是我们会发现,前端进行请求时获取的数据并不正确,分页中出现了一定的重复数据。

由于大量数据是并发创建的,所以create_time字段值是相同的。这里会有一个很有趣的问题,当order by的字段相同的时候 系统对数据的排序可能变得随机,即一会儿这条数据在前面,一会儿这条数据在后面了 ,所以当翻页的时候我们很容易便看到了重复的数据。

查阅了Goole和相关资料,大概总结了这种情况的原因。其实发生这种现象是“故意”设计的。

  如果没有指定ORDER BY语句,则SQL Server(或任何RDBMS)不保证以特定顺序返回结果。 有些人认为,如果没有指定order by子句,行总是以聚簇索引顺序或物理磁盘顺序返回。 然而,这是不正确的,因为在查询处理期间可以改变行顺序的许多因素,例如并行的HASH连接是更改行顺序的 *** 作符的一个很好的例子。

  如果指定ORDER BY语句,SQL Server将对行进行排序,并按请求的顺序返回。 但是,如果该顺序不是确定性的,即可能有重复的值,则在每个具有相同值的组中,由于与上述相同的原因,该顺序是“随机的”。

  确保确定性顺序的唯一方法是在ORDER BY子句中包含保证的唯一列或列组(例如主键)。

order by 和 group by的区别为:指代不同、侧重点不同、引证用法不同

一、指代不同

1、order by:排序依据。

2、group by:进行分组。

二、侧重点不同

1、order by:用来对数据库的一组数据进行排序。

2、group by:指定的规则对数据进行分组,所谓的分组就是将一个“数据集”划分成若干个“小区域”,然后针对若干个“小区域”进行数据处理。

三、引证用法不同

1、order by:order作“次序,顺序”“治安,秩序”“整齐,有条理”解时,是不可数名词。作“订购,订货”“命令,嘱咐”“汇票,汇单”解时,是可数名词。

2、group by:group的基本意思是“群,团体,组类”,指由很多的人或物偶然或有意组成的一个有秩序、有组织的整体,有时也可指较小的“人群”,还可以指一个大型的商业机构,即“集团”或某种“类别”。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9966880.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-03
下一篇 2023-05-03

发表评论

登录后才能评论

评论列表(0条)

保存