2010-11-12 75 views
2

在SQL Server 2008中,假設我在Employees表上有一個索引(LastName,FirstName)。該索引在兩列上均按ASC排序。在下面的查詢中是否有指向ORDER BY的地方?在索引列上使用ORDER BY

SELECT LastName, FirstName 
FROM  Employees 
ORDER BY LastName, FirstName 

由於數據已經按照索引排序,查詢分析器是否足夠聰明以省略ORDER BY?或者總是指定所需的順序更安全?

Ps。我並沒有試圖進入「微觀優化」 - 只是更好地理解在這種情況下會發生什麼。

更多信息:

來檢驗這個理論,我加了一些隨機數據,創建一個查詢,省略了ORDER BY,並對結果進行排序。

回答

1

即使必須使用ORDER BY子句,以獲得rodered的結果,但SQL優化器是足夠聰明,利用此操作的指標。 檢查執行計劃,你會發現只有索引被使用,而不是基表和操作也不會花費太多時間,因爲記錄是從它們已經下訂單的索引中獲取的。

1

只是想提從astander的答案,我發現非常有趣列出的文章評論之一...

Create view foobar 
as 
select top 100 percent * from foo order by bar 

select * from foobar 

上面的語句將無法從富排序的結果集。您沒有爲訂單詢問,所以查詢計劃實際上可以從視圖中刪除訂單請求。即使此DID適用於某些舊版本的SQL Server,也不是預期的結果。您沒有要求在您的最終查詢中訂購,這意味着在將其返回給您之前不需要訂購結果...