MySQL也有潜规则 – Select 语句不加 Order By 如何排序?
今天遇到一个问题,有一个 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 的源代码了
MySQL也有潜规则 – Select 语句不加 Order By 如何排序?的更多相关文章
- mysql学习之完整的select语句
本文内容: 完整语法 去重选项 字段别名 数据源 where group by having order by limit 首发日期:2018-04-11 完整语法: 先给一下完整的语法,后面将逐一来 ...
- [ mysql优化一 ] explain解释select语句
NOSQL 没有什么数据表, 只是一些变量,key_value ,redis 支持的变量比较多.可以持久化文件到硬盘上. mysql 关系型数据库 ,表和表中间有各种id的关系. 缺点 高并发读 ...
- mysql使用pdo简单封装select语句
最终代码: function pdo_array_query($pdo, $table_name, $data, $fields=array('*')){ //Will contain SQL sni ...
- 原来select语句在MySQL中是这样执行的!看完又涨见识了!这回我要碾压面试官!
大家好,我是冰河~~ MySQL作为互联网行业使用最多的关系型数据库之一,与其免费.开源的特性是密不可分的.然而,很多小伙伴工作了很多年,只知道使用MySQL进行CRUD操作,这也导致很多小伙伴工作多 ...
- 转!!mysql order by 中文排序
1. 在MySQL中,我们经常会对一个字段进行排序查询,但进行中文排序和查找的时候,对汉字的排序和查找结果往往都是错误的. 这种情况在MySQL的很多版本中都存在. 如果这个问题不解决,那么MySQL ...
- MySQL数据库中实现对中文字段按照首字字母排序
转载自网络! 1. 在MySQL中,我们经常会对一个字段进行排序查询,但进行中文排序和查找的时候,对汉字的排序和查找结果往往都是错误的. 这种情况在MySQL的很多版本中都存在. 如果这个问题不解决, ...
- mysql order by 中文 排序
mysql order by 中文 排序 1. 在MySQL中,我们经常会对一个字段进行排序查询,但进行中文排序和查找的时候,对汉字的排序和查找结果往往都是错误的. 这种情况在MySQL的很多版本中都 ...
- 【中文排序】mysql order by 中文排序
1. 在MySQL中,我们经常会对一个字段进行排序查询,但进行中文排序和查找的时候,对汉字的排序和查找结果往往都是错误的. 这种情况在MySQL的很多版本中都存在. 如果这个问题不解决,那么MySQL ...
- MySQL实战 | 01-当执行一条 select 语句时,MySQL 到底做了啥?
原文链接:当执行一条 select 语句时,MySQL 到底做了啥? 也许,你也跟我一样,在遇到数据库问题时,总时茫然失措,想重启解决问题,又怕导致数据丢失,更怕重启失败,影响业务. 就算重启成功了, ...
随机推荐
- JS, Node.js, npm简介
序 听过JS,听过Node,也听过Node.js,还听过npm,然而并不是很清楚的知道都代表什么,这两天调接口,然后前端同学很忙,就自己把前端代码拿过来跑了,也趁机了解一下这几个概念,下边做个小的总结 ...
- JavaWeb学习总结-01 JavaWeb开发入门
一 基本概念 1 Web开发的相关知识 Web,表示网页的意思,它用于表示Internet主机上供外界访问的资源. Internet上供外界访问的Web资源分为: 静态web资源(如html 页面): ...
- w3m常用快捷键
H 显示帮助 q 退出,会有提示的 j,k,l,h 移动光标 J/K 向下/向上滚屏 T 打开一个新标签页 Esc-t 打开所有标签页,供你选择,使用jk来上下移动 U ...
- 使用BPEL创建Web服务组合
http://www.cnblogs.com/ahhuiyang/archive/2012/12/18/2824131.html 为简单起见,本例的Web服务组合只调用一个Web Service AP ...
- wpf 拖图片到窗体
前台代码:<Window x:Class="拖拽.MainWindow" xmlns="http://schemas.microsoft.com/wi ...
- ./yy.sh -d bash 执行脚本时所加的参数
-e filename 如果 filename存在,则为真 -d filename 如果 filename为目录,则为真 -f filename 如果 filename为常规文件,则为真 -L fil ...
- python开发_++i,i += 1的区分
python开发_++i,i += 1的区分 在很多编程语言(C/C++,Java等)中我们都会碰到这样的语法: 1 int i = 0; 2 ++ i; // -- i; 这样的语法在上述编程语言中 ...
- Garbage Collection C++
http://herbsutter.com/2011/10/25/garbage-collection-synopsis-and-c/ http://www.codeproject.com/Artic ...
- kali 2.0源更新
摘自网址: 修改更新源sources.list,提高软件下载安装速度(提供Kali 2.0 更新源) - 月黑风寒 - 博客园http://www.cnblogs.com/webyihui/p/485 ...
- 为什么要做url encode
因为 url 对字符有限制,比如把一个邮箱放入 url,就需要使用 urlencode 函数,因为 url 中不能包含 @ 字符.