假設我有一個ID,名稱和日期表。爲什麼要對已排序的非聚集索引字段進行排序?
而且我有這樣一個非聚集索引,
CREATE NONCLUSTERED INDEX IX_Test_NameDate ON [dbo].[Test] (Name, Date)
當我運行查詢,
select
[Name], [Date]
from
[dbo].[Test] WITH (INDEX(IX_Test_NameDate))
where
[Name] like 'A%'
order by
[Date] asc
我在SQL Server的執行計劃獲得,
Select <-- Sort <-- Index Seek (NonClustered)
爲什麼那種?日期是否已經在非聚集索引中排序?更好的非聚集索引看起來像不需要排序(只有索引查找)。
(不能使用聚集索引,因爲此示例是具有多個行/索引的較大示例的精簡版本)。
例如,我得到的執行計劃(與排序)的,看起來像這樣的表,
ID Name Date
1 A 2014-01-01
2 A 2014-02-01
3 A 2014-03-01
4 A 2014-04-01
5 B 2014-01-01
6 B 2014-02-01
7 B 2014-03-01
8 B 2014-04-01
9 B 2014-05-01
10 B 2014-06-01
不應該的日期在這種情況下進行排序?
因爲'where [Name] like'A%''返回以'A'開頭的行,並且您希望resultset被'Date'排序,所以需要進行排序。它不需要爲'WHERE [Name] ='whatever'ORDER BY [Date] asc'進行排序。 – a1ex07