假设我有一张桌子人物:
ID
Name
Surname
DateOfBirth
我有这个综合指数:(Name, Surname)
我是否必须为Name创建隐式索引?例如,对于那样的where子句:
SELECT *
FROM Person
WHERE Name=?
或者它不需要,因为之前的索引会涵盖它?
答案 0 :(得分:2)
如果NAME
列是复合索引中的第一列,则不需要单独的索引来查询NAME
列。这是因为您的索引按NAME ASC, SURNAME ASC
排序,因此如果您想查找NAME
值,您的数据库只能扫描索引的相关部分。
但是,如果仅按SURNAME
过滤,则索引将毫无用处,否则无论如何都需要遍历整个索引。
这个网站很好地解释了这个: http://use-the-index-luke.com/sql/where-clause/the-equals-operator/concatenated-keys