在SQL Server 2008中,假设我在Employees表上有一个索引(LastName,FirstName)。索引在两列上按ASC排序。以下查询中的ORDER BY是否有任何意义?
SELECT LastName, FirstName
FROM Employees
ORDER BY LastName, FirstName
查询分析器是否足够智能以省略ORDER BY,因为数据已按索引排序?或者总是指定所需的顺序更安全吗?
聚苯乙烯。我不打算进入“微观优化” - 只是更好地理解这种情况下发生的事情。
更多信息:
为了测试这个理论,我随机添加了一些数据,创建了一个省略了ORDER BY的查询,并且结果是有序的。
答案 0 :(得分:6)
否,您不能省略订单。
如果没有特别订购,则无法保证记录的退货顺序。
看看
Order of Result Set of SELECT Statement on Clustered Indexed Table When ORDER BY is Not Used
答案 1 :(得分:1)
即使必须使用ORDER BY子句来获取结果,但SQL优化器足够聪明,可以使用索引进行此操作。 检查执行计划,你会发现只使用索引而不是基表,操作也不会花费太多时间,因为记录是从已经排序的索引中提取的。
答案 2 :(得分:1)
只是想提一下旁观者答案中所列文章中的一条评论,我觉得这很有意思......
Create view foobar
as
select top 100 percent * from foo order by bar
select * from foobar
上述语句不是foo的排序结果集。您没有询问订单,因此查询计划实际上可以从视图中删除订单请求。即使此DID适用于某些较旧版本的SQL Server,也不是预期的结果。您没有在最终查询中要求订单,这意味着在将结果返回给您之前无需订购结果...