新聞中心

成都創(chuàng)新互聯(lián)是一家專注于網(wǎng)站設(shè)計制作、成都網(wǎng)站設(shè)計與策劃設(shè)計,寧河網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:寧河等地區(qū)。寧河做網(wǎng)站價格咨詢:13518219792
$explain
$explain 運算符提供了有關(guān)查詢、索引使用以及查詢統(tǒng)計的相關(guān)信息,這在索引優(yōu)化方面非常有用?!禡ongoDB覆蓋索引查詢》一節(jié)中我們已經(jīng)使用以下代碼在 users 集合中的 gender 和 name 字段上的創(chuàng)建了索引:
> db.users.createIndex({gender:1, name:1})
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}
在 mongo shell 中,您可以通過 $explain 的輔助方法 explain() 來檢索查詢的相關(guān)信息:
> db.users.find({gender:"M"}, {name:1,_id:0}).explain()
上面的 explain() 查詢會返回以下分析結(jié)果:
{
"queryPlanner" : {
"plannerVersion" : 1,
"namespace" : "bianchengbang.users",
"indexFilterSet" : false,
"parsedQuery" : {
"gender" : {
"$eq" : "M"
}
},
"winningPlan" : {
"stage" : "PROJECTION",
"transformBy" : {
"name" : 1,
"_id" : 0
},
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : {
"gender" : 1,
"name" : 1
},
"indexName" : "gender_1_name_1",
"isMultiKey" : false,
"multiKeyPaths" : {
"gender" : [ ],
"name" : [ ]
},
"isUnique" : false,
"isSparse" : false,
"isPartial" : false,
"indexVersion" : 2,
"direction" : "forward",
"indexBounds" : {
"gender" : [
"[\"M\", \"M\"]"
],
"name" : [
"[MinKey, MaxKey]"
]
}
}
},
"rejectedPlans" : [ ]
},
"serverInfo" : {
"host" : "LAPTOP-MDE57TIS",
"port" : 27017,
"version" : "4.0.10",
"gitVersion" : "c389e7f69f637f7a1ac3cc9fae843b635f20b766"
},
"ok" : 1
}
關(guān)于上面的運行結(jié)果,有以下幾點需要說明:
- indexOnly:若字段的值為 true,則表示此查詢中使用了索引;
- cursor:指定使用的游標(biāo)類型,BTreeCursor 類型表示使用了索引,還提供了所用索引的名稱,BasicCursor 表示在不使用任何索引的情況下進行了完全掃描;
- n:表示返回的匹配文檔數(shù);
- nscannedObjects:表示掃描文檔的總數(shù);
- nscanned:表示掃描的文檔或索引條目的總數(shù)。
$hint
$hint 運算符(也叫“強制查詢優(yōu)化器”)能夠使用指定的索引來進行查詢,以此來測試查詢的性能。當(dāng)您想要測試具有不同索引的查詢性能時,此功能特別有用。在 mongo shell 中您可以使用 $hint 的輔助方法 hint() 來使用此功能,例如下面的查詢指定了要使用 gender 和 name 字段的索引:
> db.users.find({gender:"M"},{name:1, _id:0}).hint({gender:1, name:1})
{ "name" : "bianchengbang" }
使用 explain() 來分析以上查詢:
> db.users.find({gender:"M"},{name:1, _id:0}).hint({gender:1, name:1}).explain()
{
"queryPlanner" : {
"plannerVersion" : 1,
"namespace" : "bianchengbang.users",
"indexFilterSet" : false,
"parsedQuery" : {
"gender" : {
"$eq" : "M"
}
},
"winningPlan" : {
"stage" : "PROJECTION",
"transformBy" : {
"name" : 1,
"_id" : 0
},
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : {
"gender" : 1,
"name" : 1
},
"indexName" : "gender_1_name_1",
"isMultiKey" : false,
"multiKeyPaths" : {
"gender" : [ ],
"name" : [ ]
},
"isUnique" : false,
"isSparse" : false,
"isPartial" : false,
"indexVersion" : 2,
"direction" : "forward",
"indexBounds" : {
"gender" : [
"[\"M\", \"M\"]"
],
"name" : [
"[MinKey, MaxKey]"
]
}
}
},
"rejectedPlans" : [ ]
},
"serverInfo" : {
"host" : "LAPTOP-MDE57TIS",
"port" : 27017,
"version" : "4.0.10",
"gitVersion" : "c389e7f69f637f7a1ac3cc9fae843b635f20b766"
},
"ok" : 1
}分享題目:MongoDB$explain與$hint:查詢分析
文章轉(zhuǎn)載:http://m.fisionsoft.com.cn/article/dhcioec.html


咨詢
建站咨詢
