2011-05-24 47 views
3

给定一个数据库表例如:数据库索引是否反向工作?

ID 
Name 
DateOfBirth 

说我想创造的出生日期索引,我可能会DateOfBirth ascending添加索引。如果我的代码现在查询DOB升序,它将运行得很快。

但是,数据库是否足够智能以反向使用索引,即如果我查询orderby DateOfBirth descending它是否仍然能够使用该索引,还是应该为降序排序创建另一个索引?

回答

5

索引页形成一个双向链表,如下所示,同时指向下一页和上一页。

enter image description here

因此SQL Server可以既向前和向后遍历索引。扫描方向is shown in the properties of the execution plan

其中Asc/Desc变得重要的是在复合索引。

如果将索引定义为ID ASC, Name ASC, DateOfBirth ASC,则例如仍需要对查询ORDER BY ID ASC, Name DESC, DateOfBirth ASC进行排序。

请注意,您可能会有比您意识到的更多的复合索引以及非唯一的非聚集索引will have the clustered index key value added to its key