SQL中的复合索引

时间:2016-03-13 18:33:08

标签: sql indexing

假设我有一张桌子人物:

ID 
Name
Surname
DateOfBirth

我有这个综合指数:(Name, Surname)

我是否必须为Name创建隐式索引?例如,对于那样的where子句:

SELECT * 
FROM Person 
WHERE Name=?

或者它不需要,因为之前的索引会涵盖它?

1 个答案:

答案 0 :(得分:2)

如果NAME列是复合索引中的第一列,则不需要单独的索引来查询NAME列。这是因为您的索引按NAME ASC, SURNAME ASC排序,因此如果您想查找NAME值,您的数据库只能扫描索引的相关部分。

但是,如果仅按SURNAME过滤,则索引将毫无用处,否则无论如何都需要遍历整个索引。

这个网站很好地解释了这个: http://use-the-index-luke.com/sql/where-clause/the-equals-operator/concatenated-keys