某天项目中写了一句排序sql,但是发现每次执行的结果都不同,就是排序顺序不一样。

select * from table_tmp order by printStatus asc,dealTime desc

  查询了很多资料,也没找到一个比较确认的理由,只是较多人认为是由于缓存的存在。引用一下别人的回答:

  根数据库系统的算法有关,早期版本的算法是自然的多个线程二分法,那个线程先查到满足条件的数据就先输出出来,这样就是乱序的,后期经过改进按照主键自然排序输出。如果order by的值相同,一般是按自然排序,就是首个字符的字母或汉字的发音的首字母的s排序。order by的字段自然排序,如果你的order by 字段是resort,resort值相同的情况下,是可能有两种结果,一种就是你列出的随机排序,还有一种就是按主键来排序。这个问题不是固定的,还可能跟你的服务器性能都有关系,如果内存足够大,执行mysql的时候会提供足够大的缓冲池,也可能会出现另一种结果。所以很有可能是因为缓存的存在,在mysql客户端存在缓存,然后每一次查询都走缓存所以他的顺序不会发生改变。然而执行java程序顺序不一致,可能就是因为没有走缓存,每一次都是实时查询。也许java程序的这种结果本身就具有更多的可靠性。 

  

  知道问题的原因,解决就很简单了,不是由于order by后面的值相同才出现问题吗,那就再加个排序字段,比如id什么的;

select * from table_tmp order by printStatus asc,dealTime desc,id asc

mysql排序,同样的sql,mysql 每次查询结果顺序不一致的更多相关文章

  1. C# Mysql Dapper和原生sql 插入和查询速度比较

    1.表中有三个字段,已经有100多万条数据,每次插入10万条数据 时间单位:秒 秒 Dapper批量Model插入时间:40.6165513,Dapper单条Model插入时间:95.9492972, ...

  2. MySQL、Oracle和SQL Server的分页查询语句

    假设当前是第PageNo页,每页有PageSize条记录,现在分别用Mysql.Oracle和SQL Server分页查询student表. 1.Mysql的分页查询: SELECT * FROM s ...

  3. MySQL 排序

    MySQL 排序 我们知道从MySQL表中使用SQL SELECT 语句来读取数据. 如果我们需要对读取的数据进行排序,我们就可以使用MySQL的 ORDER BY 子句来设定你想按哪个字段哪中方式来 ...

  4. mysql排序(四)

    MySQL 排序 我们知道从 MySQL 表中使用 SQL SELECT 语句来读取数据. 如果我们需要对读取的数据进行排序,我们就可以使用 MySQL 的 ORDER BY 子句来设定你想按哪个字段 ...

  5. 十八、MySQL 排序

    MySQL 排序 我们知道从 MySQL 表中使用 SQL SELECT 语句来读取数据. 如果我们需要对读取的数据进行排序,我们就可以使用 MySQL 的 ORDER BY 子句来设定你想按哪个字段 ...

  6. MySQL如何定位慢sql

    MySQL如何定位慢sql MySQL"慢SQL"定位 数据库调优我个人觉得必须要明白两件事 1.定位问题(你得知道问题出在哪里,要不然从哪里调优呢) 2.解决问题(这个没有基本的 ...

  7. SQL关联子查询

    SQL关联子查询执行顺序: 1.先取到主查询中的相关数据,一次取一行主查询的数据 2.然后传入子查询,进行子查询 3.最后做主查询where筛选,注意子查询的where条件同样需要加在主查询后 参考: ...

  8. MySQL的EXPLAIN命令用于SQL语句的查询执行计划

    MySQL的EXPLAIN命令用于SQL语句的查询执行计划(QEP).这条命令的输出结果能够让我们了解MySQL 优化器是如何执行SQL 语句的.这条命令并没有提供任何调整建议,但它能够提供重要的信息 ...

  9. mysql 常用 sql 语句 - 快速查询

    Mysql 常用 sql 语句 - 快速查询 1.mysql 基础 1.1 mysql 交互         1.1.1 mysql 连接             mysql.exe -hPup    ...

随机推荐

  1. jenkins maven 自动远程发布到服务器,钉钉提醒团队

    jenkins 自动远程发布到服务器 1.安装jenkins 安装过程:自行百度 英文不好的,不要装最新版的jenkins.建议安装Jenkins ver. 2.138.4,此版本可以设置中文语言,设 ...

  2. Spring Boot分布式系统实践【基础模块构建3.3】注解轻松实现操作日志记录

    日志注解 前言 spring切面的编程,spring中事物处理.日志记录常常与pointcut相结合 * * Pointcut 是指那些方法需要被执行"AOP",是由"P ...

  3. 解决WebMagic抓HTTPS时出现SSLException

    访问我的博客 前言 在今年二月份在项目中引入了 WebMagic 技术,用来抓取合作方的书籍,详见之前文章:WebMagic之爬虫监控,这两天新接入了一个合作商,对方接口采取的是 HTTPS 协议,而 ...

  4. 微信公众号开发C#系列-5、用户和用户组管理-支持同步

    1.概述 眼前时下流行的经济有个叫粉丝经济,粉丝带动收益.一个好运营良好的公众号肯定会有一大批的粉丝团,如何挖掘粉丝来产生效益,是微信营销的关键.微信公众号后台本身提供了粉丝(用户)与用户分组的管理, ...

  5. SSM框架使用

    现在的主流框架有SSH和SSM. SSM:SpringMVC(controller)+Spring(管理各组件)+Mybaits SSH:Struct2(controller)+Spring(管理各组 ...

  6. webpack 单独打包指定JS文件(CopyWebpackPlugin)

    背景: 不确定打出的前端包所访问的后端IP,需要对项目中IP配置文件单独拿出来,方便运维部署的时候对IP做修改.因此,需要用webpack单独打包指定文件.npm install --save-dev ...

  7. Gulp 前端优化

    使用方法: 下载 node.js , https://nodejs.org/en/,并安装 msi 一下命令都属于 dos 命令 node -v,npm -v,检验是否下载成功(出现版本号) 将 np ...

  8. js 百度地图定位

    //百度 layer.msg('正在定位,请稍后'); var geolocation = new BMap.Geolocation({ enableHighAccuracy: true, //是否使 ...

  9. C# 利用位运算传递多个参数方法

    前言 在工作中用sendMessage的方法向另外一个进程中传递窗体的位置,长度,宽度四个值,但是sendMessage的方法签名中只有两个参数.于是在网上找到了一些代码,找到了这个利用位运算来合并参 ...

  10. iPhone手机怎么投影到MacPro上

    https://www.bilibili.com/video/av27255821/ 2.使用Refletor,记得电脑和手机使用同一个wifi