我有一个users
集合:
{
email: string;
name: string;
surname: string;
}
我想使email
,name
和surname
索引以提高搜索速度,但只有email
是唯一的字段,例如:
// email as unique
db.users.createIndex( { "email": 1 }, { unique: true } );
// name and surname are just index
db.users.createIndex( { "name": 1, "surname": 1 } );
怎么做到的?
边注:搜索它是通过单个或多个字段…
根据您的搜索需求创建字段索引。
如果单独使用name
和surname
进行搜索,则创建两个单字段索引。
如果您同时搜索name
和surname
(按此顺序),那么创建一个包含两个字段的复合索引:{ name: 1, surname: 1 }
。这个复合索引将同时包含name
和surname
,也只包含name
。例如,以下两个查询都使用索引:
db.collection.find({ name: "John", surname: "Doe" })
db.collection.find({ name: "John" })
如果字段的顺序是surname
和name
,那么索引应该在{ surname: 1, name: 1 }
上。当搜索单个字段时,这也将涵盖仅使用surname
的搜索。例如,这两个查询受益于索引:
db.collection.find({ name: "John", surname: "Doe" })
db.collection.find({ surname: "Doe" })
最后,email
上的索引作为唯一的索引既适用于搜索,也适用于在字段上应用唯一性。
:
- 复合索引:参见前缀子主题。
您可以通过在查询上生成查询计划来验证索引是否用于特定查询-使用explain方法。