数据库索引是否正常工作?

Tom*_*len 4 database indexing sql-server-2008

给出一个数据库表示例:

ID
Name
DateOfBirth
Run Code Online (Sandbox Code Playgroud)

假设我想在出生日期创建一个索引,我可能会添加索引DateOfBirth ascending.如果我的代码现在在DOB上升查询,它将运行良好和快速.

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

Mar*_*ith 6

索引页面形成一个双向链表,如下所示,指向下一页和上一页.

在此输入图像描述

因此,SQL Server可以向后和向前遍历索引.扫描方向显示在执行计划的属性中.

Asc/ Desc成为重要的是复合索引.

如果定义了索引,ID ASC, Name ASC, DateOfBirth ASC那么例如仍然需要对查询ORDER BY ID ASC, Name DESC, DateOfBirth ASC进行排序.

请注意,你可能有更多的复合索引作为一个非唯一的非聚集索引比你意识到的以及将已经添加到其关键的聚集索引键的值.