MongoDB 索引
MongoDB 索引
在 MongoDB 中设置索引,主要是为了增加查询效率;
没有设置索引,MongoDB 在查询数据的时候执行的是:扫描整个集合 Collection,在数据量不大的时候没有问题,一旦数据量增加到一定程度后,查询耗时就会很高,导致查询效率变低。
简单索引
1 | # 1. 方法 |
在嵌入字段上创建索引
您可以对嵌入文档中的字段创建索引,就像可以为文档中的顶级字段编制索引一样。嵌入字段上的索引不同于嵌入文档上的索引,后者包括索引中嵌入文档的最大索引大小的完整内容。相反,嵌入字段上的索引允许您使用“点表示法”来自省嵌入的文档。
请考虑一个名为 的集合,该集合保存类似于以下示例文档的文档:records
1 | { |
以下操作将在字段上创建索引:location.state
1 | db.records.createIndex( { "location.state": 1 } ) |
创建的索引将支持在字段上选择的查询,如下所示:location.state
1 | db.records.find( { "location.state": "CA" } ) |
在嵌入文档上创建索引
还可以在整个嵌入文档上创建索引。
请考虑一个名为 record 的集合,该集合保存类似于以下示例文档的文档:records
1 | { |
该字段是嵌入的文档,包含嵌入的字段和 。以下命令在整个字段上创建索引:location
city
state
location
1 | db.records.createIndex( { location: 1 } ) |
以下查询可以使用字段上的索引:location
1 | db.records.find( { location: { city: "New York", state: "NY" } } ) |
注意
尽管查询可以使用索引,但结果集不包括上面的示例文档。对嵌入的文档执行相等匹配时,字段顺序很重要,嵌入的文档必须完全匹配。有关查询嵌入文档的详细信息,请参阅查询嵌入文档。
其他注意事项
在索引生成期间,应用程序可能会遇到性能降低的问题,包括对集合的有限读/写访问权限。有关索引生成过程的详细信息,请参阅填充集合上的索引生成,包括复制环境中的索引生成部分。
某些驱动程序可能指定索引,使用而不是用作规范。这对生成的索引没有任何影响。NumberLong(1)``1