2017-07-30 46 views
1

我是Mongo的新手,已經搜索過,但沒有看到具體的答案。Mongo - 如何解釋查詢而不執行它

據我所知,Mongo explain method將與可能的訪問計劃並行執行查詢,並根據執行時間選擇一個獲勝計劃。

「最佳實踐指南」指出「查詢計劃可以在不必首先運行查詢的情況下進行計算和返回」。 我無法找到如何在文檔中做到這一點。

那麼,即使獲獎計劃需要很長時間才能執行,甚至會返回一個小結果集,例如對大集合進行排序呢?

我已經看到過早的評論,說明在返回前101個文檔後停止執行,但在官方文檔中再次找不到。

所以我的問題是:如何獲得訪問計劃而不執行查詢?

感謝您的幫助。我正在使用Mongo 3.4。

回答

0

您可以設置explain()函數的詳細程度。默認情況下,它使用queryPlanner這是(如果我是正確的)你正在尋找什麼。

檢查在official MongoDB documentation about explain()

+0

謝謝。我讀了queryPlanner文檔,但不清楚它,因爲它聲明它不返回執行結果,但是這並不明確表示查詢未執行,只是不返回結果。我相信你是對的。 –

0

MongoDB的其他模式通過運行查詢的一個有限的子集建立Query Plans,然後緩存獲勝的計劃,以便可以重新使用(直到一些導致緩存刷新)。

因此,「有限的子集」意味着它將得到匹配的100個文檔的「樣本」的文檔,以及再往前走了,但什麼文檔通過

的查詢計劃指計算並無需先 返回運行查詢

是,你可以做一個解釋你運行完整的查詢之前。這是很好的做法,因爲它會提前爲您提供計劃緩存。

簡而言之,如果MongoDB發現另一個查詢花費的時間超過了完成的查詢,它將停止執行並拋棄該計劃,轉而採用更高效的計劃。例如,您可以通過運行allPlansExecution解釋在colscan上選擇索引的位置來看到這一點。