创建一个复合索引
复合索引 是包含多个字段引用的索引。复合索引可以提高对索引中确切字段或索引前缀中字段的查询性能。复合索引前缀。对常用查询字段进行索引可以增加这些查询被覆盖的机会,这意味着MongoDB可以使用索引完全满足查询,而不必检查文档。
要创建复合索引,请使用db.collection.createIndex() 方法
db.<collection>.createIndex( { <field1>: <sortOrder>, <field2>: <sortOrder>, ... <fieldN>: <sortOrder> } )
限制
您可以在单个复合索引中指定最多32个字段。
开始之前
创建一个包含这些文档的 students 集合
db.students.insertMany([ { "name": "Alice", "gpa": 3.6, "location": { city: "Sacramento", state: "California" } }, { "name": "Bob", "gpa": 3.2, "location": { city: "Albany", state: "New York" } } ])
步骤
以下操作创建了一个包含 name 和 gpa 字段的复合索引
db.students.createIndex( { name: 1, gpa: -1 } )
在此示例中
在
name上的索引是升序的 (1)。在
gpa上的索引是降序的 (-1)。
结果
创建的索引支持基于以下查询
同时选择
name和gpa字段的查询。仅支持
name字段,因为name是复合索引的前缀。
例如,该索引支持以下查询
db.students.find( { name: "Alice", gpa: 3.6 } ) db.students.find( { name: "Bob" } )
该索引 不支持 仅基于 gpa 字段的查询,因为 gpa 不是索引前缀的一部分。例如,该索引不支持此查询
db.students.find( { gpa: { $gt: 3.5 } } )
了解更多
要了解如何创建高效的复合索引,请参阅ESR(相等、排序、范围)规则。
要了解排序顺序(升序或降序)如何影响复合索引的性能,请参阅使用索引排序查询结果。
要了解其他索引类型,请参阅索引类型。
要了解可以为索引指定哪些属性,请参阅索引属性。