您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

为什么在使用GROUP BY且未指定任何顺序时SQL Server 2008为何顺序?

为什么在使用GROUP BY且未指定任何顺序时SQL Server 2008为何顺序?

要回答此问题,请查看两者产生的查询计划。

一个SELECT是一个简单的表扫描,这意味着它将按分配顺序生成行。由于这是一个新表,因此它与您插入记录的顺序匹配。

第二个SELECT添加了GROUP BY,由于估计的行数非常低,因此sql Server通过不同的排序来实现GROUP BY。如果您有更多行或将聚合添加到SELECT,此运算符可能会更改。

例如,尝试:

CREATE TABLE #Values ( FieldValue varchar(50) )

;WITH FieldValues AS
(
    SELECT '4' FieldValue UNION ALL
    SELECT '3' FieldValue UNION ALL
    SELECT '2' FieldValue UNION ALL
    SELECT '1' FieldValue
)
INSERT INTO #Values ( FieldValue )
SELECT
    A.FieldValue
FROM FieldValues A
CROSS JOIN FieldValues B
CROSS JOIN FieldValues C
CROSS JOIN FieldValues D
CROSS JOIN FieldValues E
CROSS JOIN FieldValues F

SELECT
    FieldValue
FROM #Values
GROUP BY
    FieldValue

DROP TABLE #Values

由于行数的原因,这变成了哈希聚合,现在查询计划中没有排序。

如果没有ORDER BY,则sql Server可以以任何顺序返回结果,并且返回顺序是它认为可以最快地返回数据的方式的副作用。

SQLServer 2022/1/1 18:31:50 有480人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶