首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >由于SQL中没有默认顺序,如果没有指定order,那么是什么决定了顺序行的返回呢?

由于SQL中没有默认顺序,如果没有指定order,那么是什么决定了顺序行的返回呢?
EN

Stack Overflow用户
提问于 2014-12-08 14:25:30
回答 3查看 451关注 0票数 1

我知道,如果SQL查询没有按参数的顺序排序,则根本没有排序。当不按订单运行查询时,我希望看到相同的结果以不同的顺序进行。

但是,结果仍然按顺序返回(即有一行1,一行2等等),只是不可靠--因此,如果不对结果进行排序,将由什么来确定返回行的顺序(想必是逐个案例的)。

具体来说,我的经验是使用MySQL,但我从理论上对此感到好奇,而不是试图解决特定的问题。

编辑:如果我真的想订购一个查询,我总是使用订单--这只是好奇。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-12-08 14:50:33

由于明显的原因,数据库供应商没有发布关于无序结果集中将出现哪些顺序行的信息(这只会导致依赖于不可靠的当前实现的人)。

然而,常识告诉我们,促成明显秩序的最可能因素包括:

  1. 以任何格式存储的行的顺序顺序(可以是聚集索引,对于存储SAM类型文件中记录的不变长度段的数据库,或者使用XML等可变长度机制的数据库添加行顺序,或者存储可变长度记录并在增加行大小时将它们移动到存储文件末尾的数据库添加的行--除非移动--行),至少用于需要扫描表的搜索。
  2. 对于存在覆盖索引且从未查询实际表的实例,索引顺序。
  3. 上述一项或另一项用于基于索引的搜索,根据实现需要从表中获得额外数据。
票数 2
EN

Stack Overflow用户

发布于 2014-12-08 14:35:46

在没有指定ORDER BY的情况下,如何决定行顺序的答案是:许多内部考虑因素可能取决于数据如何存储在磁盘(或内存中)、数据库执行查询的操作类型(例如JOIN),以及数据库引擎可能发生变化的许多其他因素。

底线是,除非使用ORDER BY,否则SQL标准都说dbms根本不需要保证排序结果集。因此,没有理论上的默认。如果需要以某种方式对数据进行排序,请始终使用ORDER BY

票数 1
EN

Stack Overflow用户

发布于 2014-12-08 14:29:57

这取决于数据库:如果没有指定聚集索引,在一些花招下 Server将对聚集索引进行排序,因为这与磁盘上存储行的方式近似。

对于其他do,所有的赌注都取消了,您可以理解为什么:尽管其他供应商不一定采用与Server相同的机制,但他们当然希望在磁盘/缓冲器/日志/块级别上可以自由地重新设计内容,而不必重写datase/查询解析引擎的部分。

其次,SQL作为一种声明性语言,与您,用户有一个协议,您告诉它您想要什么,它决定如何获得它。如果不指定排序,那么就不能对返回的数据的顺序做出任何假设。

编辑:在评论中指出的但书中添加。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27360116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档