在工作时,我只是注意到 SQL Server 的顺序是第一列,选择列表中的第二列,当它具有不同的并且不是按照随机顺序或按顺序创建记录时。
任何人都可以确认自己的经验吗?
最佳答案
如果Distinct Sort
运算符是查询执行计划中的最后一个,那么最终顺序将按列顺序排列似乎是一个合理的假设。但是,如果您真的希望以某种方式对它们进行排序,则不应依赖此假设。您应该明确添加 ORDER BY
条款。冒着事情不正确的风险来获得潜在的小性能提升是不值得的。还有其他运算符可以确保 DISTINCTness,例如聚合。你确定它会排序吗?
嘿,如果引擎变得足够聪明,可以确定返回的行已经是不同的并且不需要做任何进一步的事情(例如排序或任何类型的聚合或其他流来丢弃重复的行)怎么办?这可能相当容易,具体取决于是否包含(全部)基础表中的主键列或唯一列。例如,如果您在 OrderID
上有一个聚集索引, 任何包含 OrderID
的查询值不可能被重复的地方,已经可以证明是不同的!
依赖某些操作的副作用是一个坏习惯。想想意见:很长一段时间,你被允许放ORDER BY
从某种意义上说,它奏效了,即使它不应该被依赖。然后,人们升级了他们的 SQL Server 数据库并发现——糟糕——旧的行为不再受支持。我使用的是 SQL 2000 数据库,在升级到 SQL 2005 并更改兼容模式后,前端的几个数据表不再排序--哎呀。
并考虑并行性——这将任务分解为更小的部分。并行性已经被证明可以打破 Scope_Identity()
在某些情况下,在某些版本的 SQL Server 中。如果一个工作线程在另一个工作线程之前完成,它的结果可能会在其他线程完成之前流式传输到客户端——从而突然改变顺序。
做对了。添加 ORDER BY
.不要再猜测会发生什么或可能发生什么或应该发生什么。或者什么不会或不能或不应该。
关于sql-server - 如果未定义 order by 子句,则不同选择中的第一列是默认顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16310763/