今天遇到一个问题,有一个 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. Python Cookbook (2) 文件
  2. 冲突域、广播域的通俗讲解
  3. ng-template和ngTemplateOutlet
  4. Node.js+Koa开发微信公众号个人笔记(一)准备工作 - ZhangCui - 博客园
  5. 小程序swiper效果高宽设置(微信小程序交流群:604788754)
  6. JAVAWeb项目 微型商城项目-------(二)数据库设计
  7. python怎么修改界面颜色_python中颜色设置
  8. mysql php端口_php 连接mysql 代码 端口号是3307!
  9. USGS 官方批量下载软件bda 安装问题
  10. 恒玉佳壬二酸使用方法,15壬二酸能帮助祛痘吗
  11. 使用mJS进行物联网嵌入式脚本和开发的新方法
  12. 计算机应用演技,最近快手最火的句子 生活还是需要一点演技的
  13. asp.net 生成二维码,带logo,带下方文字
  14. linux 程序开发
  15. CAD常见的20个问答
  16. html中input标签中type属性小总(包含html5新增表单属性)
  17. 感受5.12汶川大地震
  18. Python数据分析与机器学习21- 逻辑回归项目实战5-阀值
  19. DDD实战11 在项目中使用JWT的token 进行授权验证
  20. 用计算机数字技术制作的电影是,数字技术在影视制作之中的应用

热门文章

  1. 箭头函数可被打印却不能调用_5种应该避免使用箭头函数的情况
  2. Android自定义sleep图,android自定义view实现钟表效果
  3. @transaction使自定义注解失效_【完美】SpringBoot中使用注解来实现 Redis 分布式锁...
  4. 课时 16 深入理解 etcd:基于原理解析(曾凡松)
  5. linux终端名字怎么改,Ubuntu系统把终端用户名改成红色的技巧
  6. poi 启用保护后取消_雪佛龙取消商标许可,澳洲加德士更名Ampol后启用新LOGO
  7. 获取android设备唯一编号_android 获取手机设备的唯一码(IMIE )
  8. 3 v4 中心节点固定_科研人员提出新型水声网络移动节点接入协议
  9. 根据坐标点鼠标 不移动_工地基本功:别管一致不一致,CAD坐标一次全部导入...
  10. python的flag是什么意思_python flag 什么意思