今天遇到一个问题,有一个 Select 语句没有加 “Order By”,返回的数据是不确定的。

这种问题碰到不止几次了。追根寻底, Select 语句如果不加 “Order By”, MySQL会怎么排序呢?

在网上搜了一下,在MySQL论坛发现了这篇文章。

http://forums.mysql.com/read.php?21,239471,239688#msg-239688

简单翻译一下

* 不能依赖 MySQL 的默认排序
* 如果你想排序,总是加上 Order By
* GROUP BY 强加了 Order By (这与标准语法冲突,如果要避免,请使用 ORDER BY NULL)这里我有疑问,
到底强加了何种 Order by

对于 MyISAM 表
MySQL Select 默认排序是按照物理存储顺序显示的。(不进行额外排序).
也就是说
SELECT * FROM tbl – 会产生“表扫描”。如果表没有删除、替换、更新操作,记录会显示为插入的顺序。

InnoDB 表
同样的情况,会按主键的顺序排列。再次强调,这只是潜规则(artifact of the underlying implementation:怎么翻译?),
不靠谱的。

我的理解与推测:

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

最后总结

“Order By 是要加的”

如果谁想更深一步了解,需要看看 MySQL 的源代码了。

转载于:https://www.cnblogs.com/panshuai/p/4744730.html

MySQL也有潜规则 – Select 语句不加 Order By 如何排序?相关推荐

  1. MySQL使用SELECT 语句不加ORDER BY默认是如何排序的?

    大家好,我是阿飞云 怕什么真理无穷,进一步有近一步的欢喜 记录一个MySQL查询排序的问题,一个SQL语句没有加order by,那么查询出来的结果到底是按照什么规则排序的呢?查询了网上的一些资料,分 ...

  2. mysql 查询优化器跟踪_3. select语句执行过程-优化器

    1.有哪些 2.开启追踪 优化器追踪默认是关闭的 2.1 开启 SHOW VARIABLES LIKE 'optimizer_trace'; set optimizer_trace='enabled= ...

  3. mysql中,一条select语句是如何执行的?

    接下来通过语句弄明白整个Select语句的内部运行状态: 连接器: Mysql>mysql -uroot -p 你首先连接到这个数据库上:链接器负责跟客户端建立连接,获取权限,维持和管理连接 ● ...

  4. MySQL学习之基本的SELECT语句

    SQL语言的分类 DDL(Data Definition Languages.数据定义语言),这些语句定义了不同的数据库.表.视图.索 引等数据库对象,还可以用来创建.删除.修改数据库和数据表的结构. ...

  5. mysql com_select_mysql学习一之SELECT语句

    完整语法 先给一下完整的语法,后面将逐一来讲解. 基础语法 SELECT 字段列表 FROM 数据源; 完整语法 select 去重选项 字段列表 [as 字段别名] from 数据源 [where子 ...

  6. mysql索引查询 with_mysql的select语句总结与索引使用

    单表查询: 查询指定记录    select ....where 带IN的关键字查询  not in 带between and的范围查询 select column1,column2 from tab ...

  7. 一文搞懂select语句在MySQL中的执行流程!

    MySQL作为互联网行业使用最多的关系型数据库之一,与其免费.开源的特性是密不可分的.然而,很多小伙伴工作了很多年,只知道使用MySQL进行CRUD操作,这也导致很多小伙伴工作多年后,想跳槽进入大厂, ...

  8. 原来select语句在MySQL中是这样执行的!看完又涨见识了!这回我要碾压面试官!

    大家好,我是冰河~~ MySQL作为互联网行业使用最多的关系型数据库之一,与其免费.开源的特性是密不可分的.然而,很多小伙伴工作了很多年,只知道使用MySQL进行CRUD操作,这也导致很多小伙伴工作多 ...

  9. mysql一秒查询次数_单个select语句实现MySQL查询统计次数

    单个select语句实现MySQL查询统计次数 单个select语句实现MySQL查询统计次数的方法用处在哪里呢?用处太多了,比如一个成绩单,你要查询及格得人数与不及格的人数,怎么一次查询出来? My ...

最新文章

  1. 160家优秀国外技术公司博客
  2. [前端技术]如何加深对JavaScipt中的Math.ceil() 、Math.floor() 、Math.round() 三个函数的理解...
  3. UNIX再学习 -- 可重入函数和 SIGCHLD 语义
  4. PyTorch 实现 Mask-RCNN
  5. HTML5 标签、事件句柄属性以及浏览器兼容情况速查手册
  6. 复练-软考网规-两地三中心
  7. vb怎么判断整数_VB数学函数大全
  8. Windows 10 移动版正式结束支持
  9. 1716.计算力扣银行的钱-LeetCode
  10. 以汉字开头,以某个词结尾的一段文字的正则
  11. 怎么用百度搜索php网站,PHP简单获取网站百度搜索和搜狗搜索收录量的方法
  12. 嵌入式系统开发之根文件系统
  13. 【精品】好用的验证码工具类VerifyCodeUtils
  14. 用SQL语句创建学生表
  15. 2023年东南大学集成电路设计考研考情与难度、参考书及上岸前辈备考经验
  16. html5经纬度定位 源码_HTML5获取地理经纬度并通过百度接口得到实时位置
  17. python怎么学比较快,怎样快速学会python
  18. 软件工程——软件管理
  19. java对手机芯片有没有要求_芯片对手机到底有多重要
  20. 初中教师计算机培训方案,教师年度信息技术培训计划的方案

热门文章

  1. mysql中文时好时坏_mysql索引的问题,时好时坏
  2. php分布式cache,thinkPHP实现MemCache分布式缓存功能
  3. max格式转obj小工具_PDF文件转JPG等图片格式的小工具
  4. php.ini 相对路径,php中zend相对路径问题
  5. Alluxio 助力 Kubernetes,加速云端深度学习
  6. 云原生生态周报 Vol. 17 | Helm 3 发布首个 beta 版本
  7. redis启动后 允许访问_最全Redis基本知识
  8. 本地的文件怎么放到虚拟桌面_搬新家桌面文件怎么收纳?5个便宜实用的收纳神器,你买过几个?...
  9. spring 数组中随机取几个_美团Java研发三面(3年经验):MySQL+Spring源码+分布式+算法+线程...
  10. 安装mysql时安装不了starting the server_archlinux/manjaro 上安装percona-server