何时使用复合索引?

Ale*_*lex 14 sql database

有关使用复合索引的一般规则是什么?你何时应该使用它们,什么时候应该避免使用它们?

Jos*_*lio 15

当SELECT查询经常将这些列用作WHERE子句中的条件时,复合索引很有用.它提高了检索速度.如果没有必要,你应该避免它们.

文章提供了一些非常好的信息.


And*_*mar 9

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

select Status from Orders where OrderId = 42
Run Code Online (Sandbox Code Playgroud)

但是如果在(OrderId,Status)上添加复合索引,引擎可以从索引中检索所需的所有信息.

多列上的排序可以从复合索引中受益.例如,(LastName,FirstName)上的索引将使此查询受益:

select * from Orders order by LastName, FirsName
Run Code Online (Sandbox Code Playgroud)

有时,您在多列上有一个唯一的constrant.例如,您每天都要重新启动订单号.那么OrderNumber不是唯一的,但是(OrderNumber,OrderDayOfYear)是.您可以使用唯一的复合索引强制执行该操作.

我确信复合索引有更多用途,只列出几个例子.