这个是一次偶然的sql查询导致

例子,当时是这样的,我写了两个sql,如下

1 select id from (select * from cccc_cer limit 200000,10)a;
2 select id from cccc_cer limit 200000,10;
这两个sql我以为会返回同样的结果,实际上则没有。

我当时的理解是1和2都是一样的sql,没有什么区别,但是其实不是这样。

原因是select的时候实际上并不一定是按照主键id排序的,是按照select最快的次序返回(就是想这么返回怎么返回)所以在强排序的时候需要加上 order by XXX

要想返回正确结果,需要这样:
select id from (select * from cp_order limit 200000,10)a order by id;
select id from cp_order order by id limit 200000,10;

这样才会得到相同结果

后记:忘了出处,侵删。

Select 语句如果不加 “Order By”, MySQL会怎么排序呢?

* 不能依赖 MySQL 的默认排序* 如果你想排序,总是加上 Order By* GROUP BY 强加了 Order By,对于 MyISAM 表MySQL Select 默认排序是按照物理存储顺序显示的。

也就是说SELECT * FROM tbl – 会产生“表扫描”。如果表没有删除、替换、更新操作,记录会显示为插入的顺序。InnoDB 表同样的情况,会按主键的顺序排列。但是这是不靠谱的。潜规则。

“Select” 不加 “Order by”时, MySQL 会尝试以尽可能快的方法(MySQL 实际的方法不见得快)返回数据。

由于访问主键、索引大多数情况会快一些(在Cache里)所以返回的数据有可能以主键、索引的顺序输出,这里并不会真的进行排序,主要是由于主键、索引本身就是排序放到内存的,所以连续输出时可能是某种序列。在一些情况下消耗硬盘寻道时间最短的数据会先返回。如果只查询单个表,在特殊的情况下是有规律的。


最后总结“Order By 是要加的”我们对于翻页等逻辑必须默认加上order by排序,而且order by的字段如果有重复值,必须指定第二排序字段,如果第二排序字段还有重复值,那必须指定更多的字段,直到所有的排序字段能够指定唯一顺序。

BUG总结——记一次sql查询未按照想要的次序返回相关推荐

  1. sql查询时间大于某一时间_查询时间从24分钟到2秒钟:记一次神奇的SQL优化

      作者 | VWO译者 | 无明编辑 | VincentAI 前线导读:去年十二月份,VWO 平台支持团队发布了一份缺陷报告.这份报告很有意思,其中有一个来自某家企业用户的分析查询,它的运行速度非常 ...

  2. 记一次神奇的SQL查询经历,group by慢查询优化

    作者:dijia478 链接:https://www.cnblogs.com/dijia478 一.问题背景 现网出现慢查询,在500万数量级的情况下,单表查询速度在30多秒,需要对sql进行优化,s ...

  3. 关于SQL查询效率,100w数据,查询只要1秒

    1.关于SQL查询效率,100w数据,查询只要1秒,与您分享: 机器情况 p4: 2.4 内存: 1 G os: windows 2003 数据库: ms sql server 2000 目的: 查询 ...

  4. sql 查询慢的48个原因分析

    1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建计算列导致查询不优化. 4.内存不足 5.网络速度慢 6.查询出的数据量过大 ...

  5. 一个 提高SQL 查询的讨论帖

    idn(关键字),产品名称,产品数量... B表,有字段:idn,a_idn(记录A表的关键字),工序,工时... A表与B表是一对多的关系, 我想取到A表的明细及B表相关的总工时 sele aa.* ...

  6. php pdo预处理查询,关于php:从PDO预处理语句中获取原始SQL查询字符串

    在对准备好的语句调用pdoStatement::execute()时,是否有方法执行原始SQL字符串?出于调试目的,这将非常有用. 对于php>=5.1,请查看php.net/manual/en ...

  7. SQL 查询总是先执行SELECT语句吗?

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"书",获取近百本电子书入口 译者:无明 链接:22j.co/b8Un 很多 SQL 查 ...

  8. mysql 字符串搜_mysql – 在表中搜索字符串的SQL查询?

    嗨,我想在存储在mysql数据库中的表中搜索特定的字符串.表格结构如下: – +------------------------------------------------------------ ...

  9. php sql查询两个表语句,sql多表查询语句与方法

    sql多表查询有很多种方法,如有自然连接 INNER JOIN,外边查询LEFT JOIN,交叉查询JOIN,交叉连接JOIN等join on left on 等多的是哦. sql多表查询语句与方法 ...

最新文章

  1. 迭代是人,递归是神(迭代与递归的总结:比较)
  2. java applet 缺陷_Java Applet在最新JRE上的奇怪性能行为(7.55)
  3. 介绍一个好用的抓取dump的工具-ProcDump
  4. 快速记忆python函数-Python特殊语法速记记录
  5. 【疼逊】致广大QQ用户的一封信
  6. iconfont在html种颜色,iconfont+开始支持彩色图标
  7. html右侧隐藏功能区,html – CSS功能区上的三角形阴影
  8. 学web前端一定要这样学,不然学完找不到工作哭都来不及!
  9. 单身狗有福了!斯坦福教授化身丘比特,AI算法之箭帮你配真命爱侣
  10. c语言如何引用参数,关于exec:如何在C语言中使用适当的参数调用execl()?
  11. 使用类名称创建实例并调用构造函数
  12. C#联合Halcon 自定义控件鼠标双击响应事件
  13. linux登录pg数据库密码,PostgreSQL:修改数据库用户的密码
  14. Windows 95——万物之源
  15. 交叉线与直通线的区别
  16. springboot集成caffeine实现本地缓存
  17. 选型宝访谈:打造细胞级的IT透视能力,构建健壮的业务运维体系!
  18. 后台nodejs存储图片以及前端显示
  19. 的撒困的空间三看到你塞拉
  20. node.js转换shp文件数据的坐标系

热门文章

  1. androidstudio build tools安装_如何导入Android Studio(AS)项目
  2. 八十七、Python | 十大排序算法系列(上篇)
  3. 三十四、多线程真的比单线程快?
  4. 十二、深入Java的循环语句
  5. Vue 学习第四天 -2
  6. 牛津大学231页博士论文全面阐述神经微分方程(NDE),Jeff Dean点赞
  7. 真的不值得重视吗?ETH Zurich博士重新审视贝叶斯深度学习先验
  8. CVPR 2020 | ActBERT: 自监督多模态视频文字学习
  9. 节后收心困难?这15篇论文,让你迅速找回学习状态
  10. 回溯算法-排列/组合/子集