何时应使用复合索引?

16

在使用复合索引时,有哪些一般规则?何时应该使用它们,何时应该避免使用它们?

2个回答

21

当您的SELECT查询经常使用这些列作为WHERE子句的条件时,复合索引是非常有用的。它可以提高检索速度。如果不必要,应该避免使用。

这篇文章提供了一些非常好的信息。


有没有Oracle的类似文章?如果有好的参考,请点个赞。 - TonySalimi

12

仅选择少量字段的查询可以完全在索引上运行。例如,如果您在(OrderId)上有一个索引,则此查询将需要查找表:

select Status from Orders where OrderId = 42

如果在 (OrderId,Status) 上添加一个复合索引,引擎就可以从索引中检索需要的所有信息。

多列排序可以从复合索引中受益。例如,在 (LastName, FirstName) 上建立索引将有利于此查询:

select * from Orders order by LastName, FirsName

有时您需要在多列上设置唯一约束。比如说,每天都要重新开始订单编号。那么OrderNumber不是唯一的,但(OrderNumber, OrderDayOfYear)是唯一的。您可以使用唯一的复合索引来强制执行这个约束。

我相信还有许多其他用途可以使用复合索引,这只是列举了一些例子。


当 OrderId = 42 时,不需要复合索引,只需要 OrderId。 此外,复合索引 (Id, OrderId) 并没有帮助,它只能用于使用 Id 或 Id 和 OrderId 进行查询。我不是数据库专家,但我不确定一个非聚集的复合索引是否真的对 select * 有用。 - François
@Guillaume:在回答中编辑了一个(OrderId,Status)的索引。 - Andomar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接