首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >表中隐式ORDER BY order

表中隐式ORDER BY order
EN

Stack Overflow用户
提问于 2013-01-30 22:00:37
回答 3查看 1.3K关注 0票数 2

我有一个表,其中包含一个时间戳列和其他几个char列。我已经按时间戳对表中的信息进行了排序,但由于同一时间戳上有更多记录,我不知道显示的顺序是否与它们在表中插入的顺序相同。

遗憾的是,表上没有索引,所以除了时间戳之外,没有任何其他东西可以用来对它们进行排序。

示例:

代码语言:javascript
复制
      Timestamp            |    Foregin table    |    Foreign table value

2012-10-09 19:29:50.000    |       tableA        |   "random string here"
2012-10-09 19:29:50.000    |       tableA        |   "different string here"
2012-10-09 19:29:50.000    |       tableB        |   "another random string here"
2012-10-09 19:29:50.000    |       tableC        |   "string here"
2012-10-09 19:29:50.000    |       tableD        |   "another string here"

我运行的查询如下所示:

代码语言:javascript
复制
SELECT *
FROM TABLE
WHERE Timestamp BETWEEN 'x' and 'y'
ORDER BY Timestamp

回顾我的结果,我假设,但我不确定,查询返回按指定列排序的数据,并继续按下一列或多列以升序方式(可能是按文本长度或按字母顺序)对结果进行排序。

你能帮我弄清楚这件事吗?因为弄清楚订单对我来说很重要。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-01-30 22:17:02

对于未指定ORDER BY的查询,SQL Server通常没有顺序保证。因此,SELECT * FROM Tbl实质上可以以任何随机顺序返回行。由于数据在磁盘上的存储方式,如果您有一个空的缓存,并且服务器上没有正在进行的其他活动,那么您将以相当高的概率获得磁盘上的数据。如果您的服务器上有其他并发查询,并且缓存不为空,则该概率会显着降低。因此,虽然您可能会在测试中观察到特定的行为,但在生产中不会获得相同的行为。

也就是说,如果需要按特定顺序返回行,则需要指定适当的ORDER BY子句。在上面的例子中,你可以使用ORDER BY [Timestamp], [Foreign table], [Foreign table value]来确保记录总是以相同的顺序返回。如果您的查询包含更多列,并且它们都不是惟一的,那么您也需要将所有这些列都添加到ORDER BY中。但请记住,列越多,排序的开销就越大。

票数 8
EN

Stack Overflow用户

发布于 2013-01-30 22:17:06

SQL Server将使用显式ORDER BY子句对结果进行排序,并且不会为ORDER BY子句中所有列都相等的结果的顺序提供任何保证。

如果您希望它按其中一个字符列的字母顺序排序,则需要在ORDER BY子句中指定它。您当前的结果集可能是以这种方式排序的,但这种情况不太可能无限期地持续下去。

票数 1
EN

Stack Overflow用户

发布于 2013-01-30 22:56:58

数据库中的表本质上是无序的。这个答案是对Sebastian的回答的澄清(澄清太长了,无法发表评论)。

返回顺序不是随机的。这是武断的。而且,它可以从一个调用更改为另一个调用。在一个既有deletes又有inserts的表上,后面的记录可以与前面的记录一起散布在数据页上。同样,在数据表中也没有排序的概念。排序只是查询语句的一部分。

与系统上运行的其他查询相比,一个更大的因素是多线程(以及较少存在的多个分区)。

如果您有一个空缓存、一个不通过索引访问表的查询、表中没有删除、单个分区和单线程系统,那么数据通常将按插入顺序返回。然而,即使在这种情况下,也不能保证。如果希望数据按特定顺序排列,请使用order by。如果不想影响性能,可以包含一个标识主键并将其用于排序。

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

https://stackoverflow.com/questions/14605813

复制
相关文章

相似问题

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