发布网友 发布时间:2022-04-09 02:45
共2个回答
懂视网 时间:2022-04-09 07:06
从3.0版本后使用 db.collection.createIndex()代替db.collection.ensureIndex()
语法:db.collection.createIndex(keys, options)
参数说明:
1. keys: {字段名1:ascending,… 字段名n:ascending}: ascending 设为1 标识索引升序,-1降序
2. options : 设置索引选项,如设置名称、设置成为唯一索引
准备数据
db.index_test.insert({"name":"2","age":53,"sex":1})
db.index_test.insert({"name":"3","age":19,"sex":0})
db.index_test.insert({"name":"4","age":20,"sex":2})
db.index_test.insert({"name":"5","age":63,"sex":5})
db.index_test.insert({"name":"6","age":18,"sex":0})
db.index_test.insert({"name":"7","age":98,"sex":1})
db.index_test.insert({"name":"8","age":76,"sex":1})
db.index_test.insert({"name":"9","age":7,"sex":2})
db.index_test.insert({"name":"l0","age":15,"sex":1})
db.index_test.insert({"name":"l","age":23,"sex":1})
语法: db.collections.createIndex({“字段名”:1或-1},{options})
示例:
db.index_test.createIndex({"age":1})
执行成功后可以看到返回的numIndexesAfter比numIndexesBefore大
示例1:查询字段不包含索引字段
db.index_test.find({"sex":1}).explain("executionStats")
可以看到其 winningPlan.stage=COLLSCAN是全表扫描
示例2:查询字段同时包含索引字段和非索引字段
db.index_test.find({"age":{"$gte":10},"sex":1}).explain("executionStats")
虽然 winningPlan.stage=FETCH以及winningPlan.inputStage.stage =IXSCAN,但是其totalKeysExamined和totalDocsExamined都比nReturned大,说明在查询的时候进行了一些没有必要的扫描。
示例3:查询字段同时只包含索引字段
db.index_test.find({"age":{"$gte":10}}).explain("executionStats")
可以看到返回中的
winningPlan.stage=FETCH(根据索引去检索指定document )
winningPlan.inputStage.stage =IXSCAN(索引扫描)
executionStats.nReturned=totalKeysExamined=totalDocsExamined=9表示该查询使用的根据索引去查询指定文档
(nReturned:查询返回的条目,totalKeysExamined:索引扫描条目,totalDocsExamined:文档扫描条目)
热心网友
时间:2022-04-09 04:14