程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> DB2數據庫 >> DB2教程 >> MongoDB中 同時使用$or和sort()查詢性能分析

MongoDB中 同時使用$or和sort()查詢性能分析

編輯:DB2教程

文章介紹了關於MongoDB中 同時使用$or和sort()查詢性能分析,有需要的同學看看,別設計的網站幾千條記錄就卡死服務器了。  代碼如下 復制代碼

mongos> db.find({ "user" : "jhon"}).sort({"name" :
1}).limit(100).explain()
{
        "cursor" : "BtreeCursor user_1",
        "nscanned" : 10100,
        "nscannedObjects" : 10100,
        "n" : 100,
        "scanAndOrder" : true,
        "millis" : 116,
        "nYields" : 0,
        "nChunkSkips" : 0,
        "isMultiKey" : false,
        "indexOnly" : false,
        "indexBounds" : {
                "user" : [
                        [
                                "jhon",
                                "jhon"
                        ]
                ]
        }
}

Second, I do $or query with sort():
mongos> db.find({ "$or" : [ { "user" : "jhon"} , { "owner" :
"jhon"}]}).sort({"name" : 1}).limit(100).explain()
{
        "cursor" : "BtreeCursor name_1",
        "nscanned" : 1010090,
        "nscannedObjects" : 1010090,
        "n" : 100,
        "millis" : 3800,
        "nYields" : 0,
        "nChunkSkips" : 0,
        "isMultiKey" : false,
        "indexOnly" : false,
        "indexBounds" : {
                "name" : [
                        [
                                {
                                        "$minElement" : 1
                                },
                                {
                                        "$maxElement" : 1
                                }
                        ]
                ]
        }
}

Last, I do $or query without sort():
mongos> db.find({ "$or" : [ { "user" : "jhon"} , { "owner" :
"jhon"}]}).limit(100).explain()
{
        "cursor" : "BtreeCursor user_1",
        "nscanned" : 100,
        "nscannedObjects" : 100,
        "n" : 100,
        "millis" : 0,
        "nYields" : 0,
        "nChunkSkips" : 0,
        "isMultiKey" : false,
        "indexOnly" : false,
        "indexBounds" : {
                "user" : [
                        [
                                "jhon",
                                "jhon"
                        ]
                ]
        }
}

可以看出:

第一次查詢中, 單獨使用sort()時性能很好。

第二次查詢中,聯合使用了$or和sort()時,性能很差。

第三次查詢中,單獨使用$or,性能很好。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved