在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
1、问题场景新上线一个交易记录导出功能,逻辑很简单:根据查询条件,导出对应的数据。由于数据量比较大,在查询数据库时采用了分页查询,每次查询1000条数据。 自测正常,测试环境正常,上线之后运营反馈导出的数据有重复记录。 原本是以为业务逻辑问题,重新 2、原因分析查询语句以 出现的场景是:以 比如,查询 也就是说,数据会来回跳动,一会儿出现在第一页,一会儿出现在第二页,这就导致导出的数据一部分重复,一部分缺失。 查看了Mysql 5.7和8.0的官方文档,描述如下:
上述内容概述:在使用 简单来说就是: 3、解决方案针对上述问题,基本的解决思路是:避免 select * from tb_order order by create_time ,id desc; 这样,在 4、拓展知识其实,上述内容在 4.1 limit查询优化如果我们只是查询一个结果集的一部分,那么不要查询所有数据,然后再丢弃不需要的数据,而是要通过limit条件来进行限制。 在没使用
了解了 4.2 limit与order by结合使用在上面第二条中已经提到, 下面示例中,根据category列进行排序查询,而id和rating是不确定的: mysql> SELECT * FROM ratings ORDER BY category; +----+----------+--------+ | id | category | rating | +----+----------+--------+ | 1 | 1 | 4.5 | | 5 | 1 | 3.2 | | 3 | 2 | 3.7 | | 4 | 2 | 3.5 | | 6 | 2 | 3.5 | | 2 | 3 | 5.0 | | 7 | 3 | 2.7 | +----+----------+--------+ 当查询语句包含limit时,可能会影响到category值相同的数据: mysql> SELECT * FROM ratings ORDER BY category LIMIT 5; +----+----------+--------+ | id | category | rating | +----+----------+--------+ | 1 | 1 | 4.5 | | 5 | 1 | 3.2 | | 4 | 2 | 3.5 | | 3 | 2 | 3.7 | | 6 | 2 | 3.5 | +----+----------+--------+ 其中id为3和4的结果位置发生了变化。 在实践中,保持查询结果的顺序性往往非常重要,此时就需要引入其他列来保证结果的顺序性了。 当上述实例引入id之后,查询语句及结果如下: mysql> SELECT * FROM ratings ORDER BY category, id; +----+----------+--------+ | id | category | rating | +----+----------+--------+ | 1 | 1 | 4.5 | | 5 | 1 | 3.2 | | 3 | 2 | 3.7 | | 4 | 2 | 3.5 | | 6 | 2 | 3.5 | | 2 | 3 | 5.0 | | 7 | 3 | 2.7 | +----+----------+--------+ mysql> SELECT * FROM ratings ORDER BY category, id LIMIT 5; +----+----------+--------+ | id | category | rating | +----+----------+--------+ | 1 | 1 | 4.5 | | 5 | 1 | 3.2 | | 3 | 2 | 3.7 | | 4 | 2 | 3.5 | | 6 | 2 | 3.5 | +----+----------+--------+ 可以看出,当添加了id列的排序,即使 5、小结本来通过实践中偶发的一个坑,聊到了 很多朋友都在使用 到此这篇关于Mysql排序的特性详情的文章就介绍到这了,更多相关Mysql排序特性内容请搜索极客世界以前的文章或继续浏览下面的相关文章希望大家以后多多支持极客世界! |
请发表评论