查询不用order by时结果默认怎么排序

总结:

如果在使用没有指定order by,那么基本上依赖于底层实现的,具体排序规则不定,所以排序的顺序也不固定,可能会随着时间发生变化

在实际工作中,如果有查询列表展示数据的功能和需求,开发前一定要先确定数据排序的规则,这样可以避免后续出现数据查询的排序结果不同的问题。

-------------------------------------------------------------------------------------------------------------------------------- 

正文:

•MyISAM 表

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

•InnoDB 表

同样的情况,会按主键的顺序排列,需要再次强调,这只是潜规则,实际也不一定完全靠谱的。



如果没有定义 order by:

那返回的数据不一定是按照主键来排序的,结果可以以任意顺序返回 - 也可能随着时间而改变。

在关系数据库中没有“自然顺序”或类似的东西(至少在我所知道的情况下)。获得可靠排序的唯一方法是显式指定 order by子句

对于同样的一批数据,在某一个时刻顺序是一样的,随着时间变化,数据会发生变化,那么在进行查询的时候,MySQL 会尝试以尽可能快的方法(MySQL 实际的方法不见得快)返回数据。

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



下面的内容分析来源:what-is-the-default-order-of-records-for-a-select-statement-in-mysql[3]

MySQL 中 SELECT 语句的默认记录顺序是什么?

9663fe76d9b0cf462bcd9b28ef54e20a.png

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

50f892741b201ab437e0bf244fe13882.png

大致解读一下回答的内容,重新发布一下之前回答过的一个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 的行的顺序取决于底层实现。


相关推荐

  1. 数据结构查找排序

    2023-12-07 00:22:03       33 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-07 00:22:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-07 00:22:03       106 阅读
  3. 在Django里面运行非项目文件

    2023-12-07 00:22:03       87 阅读
  4. Python语言-面向对象

    2023-12-07 00:22:03       96 阅读

热门阅读

  1. 13 递归求解戳气球

    2023-12-07 00:22:03       57 阅读
  2. 使用Python绘制自定义的水平线条

    2023-12-07 00:22:03       56 阅读
  3. rust和golang的对比

    2023-12-07 00:22:03       51 阅读
  4. 力扣-435.无重叠空间

    2023-12-07 00:22:03       56 阅读
  5. go基础语法10问(1)

    2023-12-07 00:22:03       50 阅读
  6. Vue基础知识点梳理总结归纳

    2023-12-07 00:22:03       68 阅读
  7. HTML总结

    2023-12-07 00:22:03       59 阅读
  8. 使用Qt进行iOS编程

    2023-12-07 00:22:03       54 阅读
  9. debian12 使用技巧

    2023-12-07 00:22:03       58 阅读
  10. Linux下各种字符编码进行转码

    2023-12-07 00:22:03       45 阅读