复合索引只适用于附加列与第一个列经常被组合查询或需要通过几个列来强制惟一性的时候。
构建一个复合聚集索引
1. 在SQL Server Management Studio中,键入并执行以下语句在OrderDetails表上创建一个复合聚集索引。
CREATE UNIQUE CLUSTERED INDEX CLIDX_OrderDetails
ON dbo.OrderDetails(SalesOrderID,SalesOrderDetailID)
2. 现在键入以下两个SELECT语句。第一个语句查询SalesOrderID的值为指定值的行,第二个语句查询SalesOrderDetailID值为指定值的行。这两个列都是CLIDX_OrderDetails索引的索引列。按“Ctrl+L”来显示估计的执行计划。
SELECT * FROM dbo.OrderDetails
WHERE SalesOrderID = 46999
SELECT * FROM dbo.OrderDetails
WHERE SalesOrderDetailID = 14147
可以看出,在第一个搜索复合索引第一个列的值的查询中,SQL Server使用一个索引查找来找到特定的行。在第二个查询中,它使用一个非常昂贵的索引扫描操作。使用这个索引扫描操作是因为不可能只依据复合索引第二个列找到值,因为这个索引起初是根据第一个列来进行排序的。因此,安排复合索引中索引列的顺序是非常重要的。记住,复合索引只适用于附加列与第一个列经常被组合查询或需要通过几个列来强制惟一性的时候。