1

我正在执行以下查询:

SELECT DISTINCT column1, colum2 FROM table.... WHERE....

但我不希望返回的结果是有序的。如何避免 sql对这些行进行排序

4

3 回答 3

9

它们本身并没有得到排序,它们只是使用表上的任何索引返回,或者只是扫描整个表。如果您希望它们随机排序,那么您需要在查询中明确说明:

SELECT *
FROM (SELECT DISTINCT column1, colum2 
      FROM table.... 
      WHERE....) A
ORDER BY NEWID()

小提琴演示

于 2013-02-01T16:15:11.380 回答
1

SELECT DISTINCT(或其他任何东西)不需要 ORDER BY ...您看到什么样的排序?可能只是数据在输入系统时已排序。

于 2013-02-01T16:18:22.170 回答
1

select distinct必须识别重复的行。基本上有两种方法可以做到这一点。一种是对数据进行排序(可以使用索引隐式完成)。然后重复的行彼此相邻出现。另一种是建立哈希表。重复的行出现在相同的哈希桶中。

对于您的查询,SQL Server 选择对数据进行排序。它恰好看起来像正在订购数据。在多线程系统上,数据可能看起来是排序的,但是当您滚动浏览它时,您会发现排序是分块的(因为数据是从每个线程返回的)。

于 2013-02-01T17:28:31.293 回答