关于SQL Distinct默认结果集排序的探讨?

hi_web 2014-04-11 11:28:45
软件环境:

系统信息:

执行查询语句 select Distinct UserID,UserName,UseMonth from TableName,同一数据库备份在两台机器上运行结果集顺序不一致。请各位大牛指点,Distinct 不加排序字段执行查询,结果集默认的顺序应该是什么,影响结果集顺序的因素都有哪些?
...全文
905 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
hi_web 2014-04-11
  • 打赏
  • 举报
回复
引用 1 楼 OrchidCat 的回复:
实事求是的讲,就现在我遇到的情况,如果distinct 不写order by 的话,实际结果集的输出顺序依赖于两个条件。 1、生成的查询计划的顺序(在不同版本的sql server 解释同一个语句的执行计划会有所不同,统计信息不同也会有所不同) 2、数据存储和访问的顺序 (这个要看是否有索引等) 还是需要具体情况,具体分析的。 个人愚见,参考
两台机器的软件环境是一样的,硬件配置不同。
Mr_Nice 2014-04-11
  • 打赏
  • 举报
回复
实事求是的讲,就现在我遇到的情况,如果distinct 不写order by 的话,实际结果集的输出顺序依赖于两个条件。 1、生成的查询计划的顺序(在不同版本的sql server 解释同一个语句的执行计划会有所不同,统计信息不同也会有所不同) 2、数据存储和访问的顺序 (这个要看是否有索引等) 还是需要具体情况,具体分析的。 个人愚见,参考
發糞塗牆 2014-04-11
  • 打赏
  • 举报
回复
这个可能就是我说的并行处理的过程导致顺序不一致,单核上不存在并行,而双核,可能使用并行的机会及其少
hi_web 2014-04-11
  • 打赏
  • 举报
回复
引用 4 楼 DBA_Huangzj 的回复:
因为优化器可能会选择并行处理,或者在多文件情况下不按“期待”顺序扫描数据,所以无法保证数据的顺序。唯一能确保顺序的只有order by。distinct内置是需要排序然后去重的,但是最终结果可能又会乱掉。另外根据sqlserver排序规则,不同的排序规则也有不同的结果
单核、双核电脑上测试,能保证顺序。多核的服务器上结果集顺序每次都可能不同。
發糞塗牆 2014-04-11
  • 打赏
  • 举报
回复
因为优化器可能会选择并行处理,或者在多文件情况下不按“期待”顺序扫描数据,所以无法保证数据的顺序。唯一能确保顺序的只有order by。distinct内置是需要排序然后去重的,但是最终结果可能又会乱掉。另外根据sqlserver排序规则,不同的排序规则也有不同的结果
發糞塗牆 2014-04-11
  • 打赏
  • 举报
回复
没有order by子句的所有查询都不保证顺序,即使有聚集索引

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧