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

这篇具有很好参考价值的文章主要介绍了MySQL使用SELECT 语句不加ORDER BY默认是如何排序的?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

大家好,我是阿飞云

怕什么真理无穷,进一步有近一步的欢喜

记录一个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 语句的默认记录顺序是什么?

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

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

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

大致解读一下回答的内容,重新发布一下之前回答过的一个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

推荐阅读

MySQL数据库设计规范,值得一读

MySQL数据库之互联网常用分库分表方案

【 一个人看起来在进行逻辑思考,但其实大多数时间只是在进行记忆检索。】

MySQL使用SELECT 语句不加ORDER BY默认是如何排序的?
文章来源地址https://www.toymoban.com/news/detail-494992.html

See you next good day~

到了这里,关于MySQL使用SELECT 语句不加ORDER BY默认是如何排序的?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Hive(23):Select高级查询之SORT/ORDER/CLUSTER/DISTRIBUTE BY

    1 ORDER BY ORDER BY [ASC|DESC] Hive SQL中的ORDER BY语法类似于SQL语言中的ORDER BY语法。会对输出的结果进行全局排序,因此底层使用MapReduce引擎执行的时候,只会有一个reducetask执行。也因此,如果输出的行数太大,会导致需要很长的时间才能完成全局排序。 默认排序顺序为升序(ASC)

    2024年02月15日
    浏览(29)
  • 如何使用SQL系列 之 如何在SQL中使用GROUP BY和ORDER BY

    结构化查询语言(SQL)数据库可以跨多个表存储和管理大量数据。对于大型数据集,理解如何排序数据是很重要的,特别是对于分析结果集或为报告或外部通信组织数据。 SQL中有两个常用的用于数据排序的语句: GROUP BY 和 ORDER BY 。 GROUP BY 语句根据查询中指定的列对数据进行分组

    2024年02月09日
    浏览(37)
  • mysql8之前如何实现row_number() over(partition by xxx order by xxx asc/desc)

    最近笔者在进行对广告业务的数据统计时遇到这种情况,业务方嫌弃离线数仓太慢,又无需太高的实时性本该使用即席查询的OLAP去做,但是当前公司调研的OLAP还没有推到广告业务侧,无奈只得使用mysql暂时顶一下。我们当前使用的是mysql5.7。 一充用户 :当日只有一次充值的

    2024年02月05日
    浏览(47)
  • Mysql 中,为什么 WHERE 使用别名会报错,而 ORDER BY 不会报错?

       我们先对salary * 12 命名一个别名annual_sal  这段代码以annual_sal升序输出且正常执行没有报错。说明 order by 可以使用别名  我们再看看这个段代码 这段代码就报错了,报错说明是 Unknown column \\\'annual_sal\\\' in \\\'where clause\\\'。 由此可以得出where语句执行是找不到annual_sal. 要解决这个问

    2023年04月15日
    浏览(31)
  • MySQL 数据库查询与数据操作:使用 ORDER BY 排序和 DELETE 删除记录

    使用 ORDER BY 语句按升序或降序对结果进行排序。 ORDER BY 默认按升序排序。要按降序排序结果,使用 DESC 。 示例按名称按字母顺序排序结果: ORDER BY DESC 使用 DESC 以降序排序结果。 示例按名称以字母逆序排序结果: 您可以使用\\\"DELETE FROM\\\"语句从现有表格中

    2024年02月05日
    浏览(57)
  • 如何进行MySQL源码调试(一条select语句的执行流程)

    一、背景 MySQL是当今世上最受欢迎的使用最广泛的开源数据库,它的繁荣离不开它的开源特性。放在过去商业数据库的时代,大家都没有机会接触到数据库的源代码,但在如今开源数据库的时代,越来越多的人开始研究数据库的源码,并给社区贡献代码,MySQL官方每次发布新

    2024年02月03日
    浏览(34)
  • mysql中order by多个字段 order by字段可以为空吗

    在MySQL中,要使用“ORDER BY”语句来进行多字段排序,必须先将多个字段的名称按照顺序排列放在“ORDER BY”后面,然后按照每个字段单独的排序规则进行排序。 排序字段的顺序按照order by语句中的先后顺序进行, 先根据第一个排序字段排序 ,如果有相同的值,则根据第二个

    2024年02月03日
    浏览(27)
  • mysql GROUP BY 怎么 order by 排序

    在 MySQL 中使用 GROUP BY 子句时,如果需要对结果进行排序,可以使用 ORDER BY 子句来对分组后的结果进行排序。 ORDER BY 子句应该放在 GROUP BY 子句之后,使用逗号来分隔需要排序的列,并在排序列后指定排序顺序。例如: 在这个例子中,SELECT 语句选择了表 table1 中的列 column1 和

    2024年02月16日
    浏览(36)
  • mysql order by 索引问题综合分析

    一,文章1 Mysql-索引失效 order by优化_orderby索引失效_zyk1.的博客-CSDN博客 总结: 0,索引 与 查询条件 与 排序字段关系,Using filesort出现场景 1.联合索引,最左匹配原则,不仅查询条件需要遵循,排序也需要遵循,查询+排序组合也要遵循 2.extra 避免出现filesort,使用index排序

    2024年02月07日
    浏览(31)
  • mysql织梦索引优化之MySQL Order By索引优化

    在一些情况下,MySQL可以直接使用索引来满足一个ORDER BY 或GROUP BY 子句而无需做额外的排序。尽管ORDER BY 不是和索引的顺序准确匹配,索引还是可以被用到,只要不用的索引部分和所有的额外的ORDER BY 字段在WHERE 子句中都被包括了。 使用索引的MySQL Order By 下列的几个查询都会

    2024年02月04日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包