zoukankan      html  css  js  c++  java
  • Mysql order by与limit联用出现的问题

    最近order by与limit联用做分页的过程中发现,查询出来的结果与预期的不一致,很明显结果是不对的,先贴出我的mysql的版本

    1.我的查询的原理是,按数据更新时间降序,取出最新的每页10条的数据,目前表中时间字段都是NULL,可以看做是多条数据的排序字段的值相同

    2.首先取出前十条数据:

    3.再取出11-20条数据:

    4.最后取出前20条数据:

    5.很明显我们可以对比出,前两次的查询结果拼起来并不是第三次查询的结果,原因:

    如果order by的字段有多个行都有相同的值(本例中都是NULL可看作相同值),mysql是会随机的顺序返回查询结果的,具体依赖对应的执行计划。也就是说如果排序的列是无序的,那么排序的结果行的顺序也是不确定的。

    基于这个我们就基本知道为什么分页会不准了,因为我们排序的字段是updateTime,正好大部分行的值相同,所以在实际执行时返回结果对应的行的顺序是不确定的。

    6.解决办法: 可以额外加一个排序条件。例如主键id字段是唯一的,可以考虑在排序字段中额外加个id排序去确保顺序稳定。

    7.现在再看是不是结果就没问题了:

  • 相关阅读:
    TensorFlow-Slim 简介+Demo
    AI 常见术语总结
    经典深度学习CNN总结
    YOLO V3 原理
    tf.app.run() 运行结束时,报错:SystemExit exception: no description
    VSCode中相对路径设置问题
    SSD算法原理
    机器学习-交叉熵原理
    tensorflow scope的作用
    水池进水和出水两个线程问题
  • 原文地址:https://www.cnblogs.com/mzlaizy/p/8287184.html
Copyright © 2011-2022 走看看