天天看點

寫給MongoDB開發者的50條建議Tip25

本系列文章翻譯自《50 Tips and Tricks for MongoDB Developers》,暫時沒有找到中文版,反正自己最近也在深入學習mongodb,是以正好拿來翻譯一下。一方面加強自己學習的效果,另一方面讓大家也一起來體驗一下需要我們這些mongodb使用者需要注意的地方。

首先聲明自己的英文水準不是太高,加之有些英文翻譯成中文也找不到合适的詞來表達,是以在文章中可能會出現英文原詞,或者說有些地方的翻譯會有些生 硬,也就是說會出現直譯的地方。翻譯該書的主要目的是為大家學習探讨用的,如果有翻譯不精準的地方,或者說有更加精準的翻譯,還請大家指出,我會及時的更正的,在此先謝過各位了。

Tip#25.Use compound indexes to make multiple queries fast

使用複合索引加速查詢

如果有可能的話,建立能被多個查詢使用的複合索引。也不總是有可能,但是如果你的多個查詢都是相似的條件,還是很必要的。

任何查詢,主要比對了索引的字首,就可以使用該索引。是以,你建立的索引應該是包含被多個查詢共享的,最大數量的條件。

假設你的應用會執行下面的查詢。

collection.find({"x":criteria,"y":criteria,"z":criteria}) 

collection.find({"z":criteria,"y":criteria,"w":criteria}) 

collection.find({"y":criteria,"w":criteria}) 

如你所見,y是唯一一個所有查詢都用到的字段,是以y字段是一個很好的候選者。z字段在前兩個查詢中出現,w字段在後兩個查詢中出現,兩者之一将會作為下一個候選者。

我們想要盡可能的命中建立的索引。如果可以确定第一個查詢很重要,或者比其他兩個頻繁,我們建立的索引就要傾向第一個查詢。假設第一個查詢的執行次數是其他兩個的上千倍,我們就可以建立下面的索引。

collection.ensureIndex({"y":1,"z":1,"x":1}) 

第一個查詢得到了很高的優化,另外兩個的部分查詢可以使用這個索引。

如果所有的查詢運作次數均等,可以建立下面的索引。

因為條件中都包含有y,是以三個查詢都可以使用這個索引,後面兩個可以使用w,中間的可以完全的是偶那個這個索引。

你可以通過下面的指令檢視一個查詢的索引使用情況。

本文轉自 virusswb 51CTO部落格,原文連結:http://blog.51cto.com/virusswb/817324,如需轉載請自行聯系原作者