当前位置:网站首页>MySQL使用SELECT 语句不加ORDER BY默认是如何排序的?
MySQL使用SELECT 语句不加ORDER BY默认是如何排序的?
2022-04-22 11:36:00 【阿飞云】
大家好,我是阿飞云
怕什么真理无穷,进一步有近一步的欢喜
记录一个MySQL查询排序的问题,一个SQL语句没有加order by,那么查询出来的结果到底是按照什么规则排序的呢?查询了网上的一些资料,分享如下:
•MyISAM 表
MySQL Select 默认排序是按照物理存储顺序显示的(不进行额外排序)。也就是说SELECT * FROM tbl – 会产生“表扫描”。如果表没有删除、替换、更新操作,记录会显示为插入的顺序。
•InnoDB 表
同样的情况,会按主键的顺序排列,需要再次强调,这只是潜规则,实际也不一定完全靠谱的。
参考:MySQL也有潜规则 – Select 语句不加 order by 如何排序?[1]
如果没有定义 order by:
那返回的数据不一定是按照主键来排序的,结果可以以任意顺序返回 - 也可能随着时间而改变。
在关系数据库中没有“自然顺序”或类似的东西(至少在我所知道的情况下)。获得可靠排序的唯一方法是显式指定 order by子句,来源when-no-order-by-is-specified-what-order-does-a-query-choose-for-your-record[2]。
对于同样的一批数据,在某一个时刻顺序是一样的,随着时间变化,数据会发生变化,那么在进行查询的时候,MySQL 会尝试以尽可能快的方法(MySQL 实际的方法不见得快)返回数据。
由于访问主键、索引大多数情况会快一些(在Cache里)所以返回的数据有可能以主键、索引的顺序输出,这里并不会真的进行排序,主要是由于主键、索引本身就是排序放到内存的,所以连续输出时可能是某种序列。在一些情况下消耗硬盘寻道时间最短的数据会先返回。如果只查询单个表,在特殊的情况下是有规律的。
下面的内容分析来源:what-is-the-default-order-of-records-for-a-select-statement-in-mysql[3]
MySQL 中 SELECT 语句的默认记录顺序是什么?

里面有一个认可和点赞比较高的回答:

大致解读一下回答的内容,重新发布一下之前回答过的一个SQL Server类型的问题。
在 SQL 世界中,顺序不是一组数据的固有属性。因此,除非您使用 order by 子句查询您的数据,否则您无法从 RDBMS 保证您的数据将按特定顺序返回 - 甚至以一致的顺序返回。
然后回答你的问题:
•MySQL 根据需要对记录进行排序,但没有任何一致性保证•如果您打算依赖此顺序进行任何操作,则必须使用 order by 指定您想要的顺序。否则做任何其他事情都是在为不受欢迎的意外做好准备。
这是所有 SQL 的属性,而不仅仅是 MySQL。SQL-92 规范中的相关文本是:
http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt
如果未指定 <order by 子句>,则 Q 的行的顺序取决于底层实现。
本文的内容就是如上这些内容了,大致总结一下: 如果在使用没有指定order by,那么基本上依赖于底层实现的,具体排序规则不定,所以排序的顺序也不固定,可能会随着时间发生变化。
在实际工作中,如果有查询列表展示数据的功能和需求,开发前一定要先确定数据排序的规则,这样可以避免后续出现数据查询的排序结果不同的问题。
如果对MySQL SELECT 语句的默认记录顺序有了解或者有研究的伙伴,欢迎留言分享你的理解。
如果文章对你有所帮助,点赞支持一下,感谢你的慷慨~
References
[1] MySQL也有潜规则 – Select 语句不加 order by 如何排序?: https://www.cnblogs.com/lushilin/p/6094373.html[2] when-no-order-by-is-specified-what-order-does-a-query-choose-for-your-record: https://stackoverflow.com/questions/20050341/when-no-order-by-is-specified-what-order-does-a-query-choose-for-your-record[3] what-is-the-default-order-of-records-for-a-select-statement-in-mysql: https://dba.stackexchange.com/questions/6051/what-is-the-default-order-of-records-for-a-select-statement-in-mysql
推荐阅读
【 一个人看起来在进行逻辑思考,但其实大多数时间只是在进行记忆检索。】
版权声明
本文为[阿飞云]所创,转载请带上原文链接,感谢
https://aflyun.blog.csdn.net/article/details/124011964
边栏推荐
- PTC: 工程机械ESG产品研发重大变革
- 直播课堂系统平台软件源码亲测可用
- 13.(地图数据篇)百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系之间的转换
- 塔米狗分享|国有股权转让法律依据及程序是什么?
- 在Docker环境上使用Debezium捕获PostgreSQL 14.2中的变更数据到Kafka
- Why can't people see the truth?
- Discrete mathematics Chapter 1
- Originally, this is the correct posture for developers to open world book day!
- 卷积神经网络
- Summary of important knowledge points of discrete structure and its application
猜你喜欢

mysql启动失败:mysql服务无法启动 服务没有报告任何错误 解决方法

Tamigou knowledge | process of equity transfer of new third board company

进程池创建多进程下载网页

Process pool create multi process Download Web page

Redis 环境安装

Wechat applet is installed using vant web yarn

点击tab栏如何让tab置顶

Stack frame understanding of function

Qdebug() print debugging information

在Docker环境上使用Debezium捕获PostgreSQL 14.2中的变更数据到Kafka
随机推荐
OpenMLDB Pulsar Connector:高效打通实时数据到特征工程
Process pool create multi process Download Web page
.env.dev不生效问题
11. (map data section) how to download and use OSM data
How to make the tab top by clicking on the tab bar
Create object memory analysis and inheritance
Looking for investors of state-owned enterprises, central enterprises and listed companies, I choose Tami dog!
Summary of important knowledge points of discrete structure and its application
Secondary vocational Cyberspace Security Skills Competition P100 - tracking meterpreter sessions using memory forensics technology
卷积神经网络
Chat聊天App第6节课创建主聊天静态页面
观测云入驻阿里云计算巢,为用户构建稳定安全的云上连接
在安装mySQL出现这种问题如何解决呢?
ES6 learning notes 4 numerical representation related to numerical expansion (octal representation) (reprinted, the memo is not my original)
解决电脑连接正常,但浏览器无法打开网页的问题
北汽福田与中国石化、轻程物联网组建中石化销售氢能源(北京)
在Docker环境上使用Debezium捕获PostgreSQL 14.2中的变更数据到Kafka
Synchronized lock and its expansion
2. flddler响应显示乱码问题解决方案
Use bitnami PostgreSQL docker image to quickly set up stream replication clusters