在使用复合索引时,有哪些一般规则?何时应该使用它们,何时应该避免使用它们?
当您的SELECT查询经常使用这些列作为WHERE子句的条件时,复合索引是非常有用的。它可以提高检索速度。如果不必要,应该避免使用。
这篇文章提供了一些非常好的信息。
仅选择少量字段的查询可以完全在索引上运行。例如,如果您在(OrderId)上有一个索引,则此查询将需要查找表:
select Status from Orders where OrderId = 42
如果在 (OrderId,Status) 上添加一个复合索引,引擎就可以从索引中检索需要的所有信息。
多列排序可以从复合索引中受益。例如,在 (LastName, FirstName) 上建立索引将有利于此查询:
select * from Orders order by LastName, FirsName
有时您需要在多列上设置唯一约束。比如说,每天都要重新开始订单编号。那么OrderNumber不是唯一的,但(OrderNumber, OrderDayOfYear)是唯一的。您可以使用唯一的复合索引来强制执行这个约束。
我相信还有许多其他用途可以使用复合索引,这只是列举了一些例子。