本系列文章翻譯自《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})
第一個查詢得到了很高的優化,另外兩個的部分查詢可以使用這個索引。
如果所有的查詢運行次數均等,可以建立下面的索引。
collection.ensureIndex({"y":1,"w":1,"z":1})
因為條件中都包含有y,因此三個查詢都可以使用這個索引,后面兩個可以使用w,中間的可以完全的是偶那個這個索引。
你可以通過下面的命令查看一個查詢的索引使用情況。
collection.find(criteria).explain()
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。