2017-02-07 53 views
2

我在本地主機上有mongodb,在數據庫中我有9000萬條記錄。當我通過db.emails.find({"name":"example"})搜索任何記錄時,獲取結果花費的時間太長。有什麼辦法可以提高mongodb的速度嗎?Mongodb花費太多時間來查找記錄

回答

3

name場創建index

db.emails.createIndex({ name: 1}) 

如果你沒有爲字段索引,那麼必須mongodb的執行查詢時,執行收集掃描,即掃描收集每一份文件,以檢查的name值字段匹配您的查詢。該指數在其他手商店只有訂購的價值name字段,可以快速檢查。

索引鍵有限制。索引條目的總大小必須小於1024字節。但是你可以使用文本索引,如果你想搜索查詢的字符串內容:如果你要搜索精確匹配

db.emails.createIndex({ name: "text"}) 

而且,那麼你可以使用散列索引:

+0

我使用同樣的功能careated指數,得到這個錯誤 { 「ok」:0, 「errmsg」:「WiredTigerIndex :: insert:key too large to index,failed 5452 {:\」Bandaancha39escalones.es4everexiliados.creatuforo.com7artpictures.com7peliculas.coma3magazine.comadictasalcibersexo.comaestrada.netagente69.comanimeid。 ..「}」, 「code」:17280, 「code Name「:」KeyTooLong「 } –

+0

謝謝@Sergey。 –

+0

正常搜索速度非常快,但是當我像查詢一樣進行搜索時,它需要很長時間。 任何提高類似查詢速度的建議。 查詢示例:db.web_tech.find({url:/.* sa。* /})。count() –

0

通常用來加快mongodb查詢,可以做的是準備一個組合索引。

就你而言,因爲它是電子郵件地址,所以我建議你要做的是將郵件作爲id並使用不區分大小寫的正則表達式執行搜索。例如,如果你想讓每個人都擁有Gmail賬戶,你可以執行像

db.users.find({_id:/@gmail.com/})

搜索,我相信這會加速你的代碼很多