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

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

为什么在使用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.FieldValueFROM FieldValues ACROSS JOIN FieldValues BCROSS JOIN FieldValues CCROSS JOIN FieldValues DCROSS JOIN FieldValues ECROSS JOIN FieldValues FSELECt    FieldValueFROM #ValuesGROUP BY    FieldValueDROP TABLE #Values

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

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



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5431729.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-11
下一篇 2022-12-11

发表评论

登录后才能评论

评论列表(0条)

保存