sql - SQL 中的无序结果

标签 sql sql-server oracle tsql

我一遍又一遍地读到,SQL 的核心是一个无序模型。这意味着多次执行相同的 SQL 查询可能会以不同的顺序返回结果集,除非包含“order by”子句。有人可以解释为什么 SQL 查询在运行查询的不同实例中可以以不同的顺序返回结果集吗?情况可能并非总是如此,但肯定有可能。

从算法上来说,当没有“order by”子句时,查询计划对确定结果集的顺序没有任何作用吗?我的意思是,当某些查询有查询计划时,算法为什么不总是以相同的顺序返回数据?

注意:我不是质疑 order by 的使用,而是问为什么没有保证,例如,我试图了解无法保证的挑战。

最佳答案

完全相同的执行计划可以返回不同排序结果的一些 SQL Server 示例

  1. 无序索引扫描可能在 allocation order 中执行或关键顺序取决于有效的隔离级别。
  2. merry go round scanning该功能允许在并发查询之间共享扫描。
  3. 并行计划通常是不确定的,结果的顺序可能取决于运行时选择的并行度和服务器上的并发工作负载。
  4. 如果计划具有无序预取的嵌套循环,则 allows the inner side of the join to proceed using data from whichever I/Os happened to complete first

关于sql - SQL 中的无序结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21371176/

相关文章:

Java小程序和数据库连接

sql - 查找 SQL 中多列中出现次数最多的情况

mysql - 对被不同外键引用两次连接的表进行计数查询

sql-server - XQuery 计划复杂性

sql - 获取 VARRAY 集合中元素的索引

Mysql只搜索 "7"in text 而不是 "17"

sql-server - T-SQL 复制表变量

sql-server - 什么是僵尸交易?

oracle - UNIX 中的 SQL select 语句 inside/inside IF..THEN 语句

sql - ORACLE SQL - 如何检查时间是否在特定范围内?