本系列文章翻譯自《50 Tips and Tricks for MongoDB Developers》,暫時沒有找到中文版,反正自己最近也在深入學(xué)習(xí)mongodb,所以正好拿來翻譯一下。一方面加強自己學(xué)習(xí)的效果,另一方面讓大 家也一起來體驗一下需要我們這些mongodb使用者需要注意的地方。
創(chuàng)新互聯(lián)建站主要從事網(wǎng)站建設(shè)、成都做網(wǎng)站、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)靖江,10年網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):028-86922220
首先聲明自己的英文水平不是太高,加之有些英文翻譯成中文也找不到合適的詞來表達,所以在文章中可能會出現(xiàn)英文原詞,或者說有些地方的翻譯會有些生 硬,也就是說會出現(xiàn)直譯的地方。翻譯該書的主要目的是為大家學(xué)習(xí)探討用的,如果有翻譯不精準的地方,或者說有更加精準的翻譯,還請大家指出,我會及時的更 正的,在此先謝過各位了。
Tip#23.Don't always use an index
不要總是使用索引
之前講到了使用索引的好處,但是讓我提醒你一下,并不是所有的查詢都應(yīng)該使用索引。假設(shè)一下,在之前的例子中,你獲取的是集合中90%的文檔,而不是一小部分的文檔。如果這種情況下,我們還是用索引的話,我們幾乎要查詢所有的索引。也就是說60G的索引都會加載到內(nèi)存中,根據(jù)索引的指針還會加載230G的文檔到內(nèi)存??偣残枰虞d60G+230G=290G的數(shù)據(jù)到內(nèi)存,這大大超過了不用索引的情況。
因此,索引通常在你查詢的只是數(shù)據(jù)的一小部分的時候很管用。有一條經(jīng)驗法則可以參考,一旦你返回的數(shù)據(jù)超過一半以上,就不要使用索引了。
如果你在一個字段建立索引,但是要求返回大量的數(shù)據(jù),是很低效的。這時候你可以通過再sort中指定{"$natural":1}來告訴mongodb,本次查詢不要使用索引。這樣就意味著將從磁盤的順序返回數(shù)據(jù),強制mongodb不使用索引。
- >db.foo.find().sort({"$natural":1})
如果一個查詢強制不使用索引,mongodb將會掃描表,意味著通過對比所有的記錄來找到符合條件的文檔。
每次增加、刪除、更新一條新的記錄,索引都會更新。假設(shè)增加一條記錄,mongodb或查詢新節(jié)點的值需要落在索引樹的哪個位置,然后在插入索引。對于刪除,也需要找到并刪除索引,更新值的話,也需要同樣的過程。因此索引對于寫操作來說會增加額外的工作。