簡體   English   中英

Mongodb查詢性能

[英]Mongodb query performance

我有一個250K文檔的集合,我想找到最后一個插入了特定屬性“siteid”的索引。 這是我正在使用的查詢。

db.getCollection('txnCollection').find({"siteid":"123456"}).limit(1).sort({"_id":-1})

如果有記錄,則很快找到。 如果沒有,性能不夠快,大約0.8s。

但是,如果我運行查詢

db.getCollection('txnCollection').find({"siteid":"123456"}).limit(1)

即使沒有siteid 123456的文檔,性能也非常快。

如果返回一條記錄來運行第二個查詢來獲取我想要的記錄,那么運行此查詢似乎很愚蠢 - 即。 最后插入的一個,但我無法找到更好的方法

有關運行時的信息解釋我得到的結果是

{
    "queryPlanner" : {
        "plannerVersion" : 1,
        "namespace" : "txn.txnCollection",
        "indexFilterSet" : false,
        "parsedQuery" : {
            "siteid" : {
                "$eq" : "123456"
            }
        },
        "winningPlan" : {
            "stage" : "SORT",
            "sortPattern" : {
                "_id" : -1
            },
            "limitAmount" : 1,
            "inputStage" : {
                "stage" : "KEEP_MUTATIONS",
                "inputStage" : {
                    "stage" : "FETCH",
                    "inputStage" : {
                        "stage" : "IXSCAN",
                        "keyPattern" : {
                            "siteid" : 1
                        },
                        "indexName" : "siteid_1",
                        "isMultiKey" : false,
                        "direction" : "forward",
                        "indexBounds" : {
                            "siteid" : [ 
                                "[\"123456\", \"123456\"]"
                            ]
                        }
                    }
                }
            }
        },
        "rejectedPlans" : []
    },
    "serverInfo" : {
        "host" : "XXXXX",
        "port" : 27017,
        "version" : "3.0.6",
        "gitVersion" : "1ef45a23a4c5e3480ac919b28afcba3c615488f2"
    },
    "ok" : 1
}

關鍵是當使用sortlimit時,在執行limit之前應用sort .....這意味着你的完整查詢結果被排序然后被限制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM