栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么在使用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可以以任何顺序返回结果,并且返回顺序是它认为可以最快地返回数据的方式的副作用。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/456210.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号