2017-12-18 360 views
2

我有以下mongodb文件與800萬文件。Mongodb查詢速度太慢,部分字段搜索索引字段

Customer 
    { 
    "lastName" : "LAST", 
    "firstName" : "FIRST" 
    } 

如果我在10毫秒的基礎上的lastName和名字,那麼它的速度快,得到的結果與搜索我有以下指標

db.customer.createIndex({lastName: 1, firstName: 1},{collation: { locale: "en_US", strength: 1}}) 

db.customer.find({lastName:"LAST" ,firstName:"FIRST"}).collation({ locale: 'en_US', strength: 1 }) 

我正在嘗試查找所有以「姓氏」作爲姓氏中的字符的文檔。但它需要超過100秒才能返回響應。我嘗試了以下選項,但都花了超過100秒。 不MongoDB的確實像SQL有點像操作('%AS%')

1)

db.customer.find({lastName:{"$regex": "AS"} ,firstName:"FIRST"}).collation({ locale: 'en_US', strength: 1 }) 

2)

db.customer.find({lastName:{"$regex": "/AS/"} ,firstName:"FIRST"}).collation({ locale: 'en_US', strength: 1 }) 

3)

db.customer.find({lastName:{"$regex": "^/AS/"} ,firstName:"FIRST"}).collation({ locale: 'en_US', strength: 1 }) 
的在你的正則表達式

回答

0

嘗試使用前綴,使MongoDB的使用範圍

db.customer.find({lastName:{"$regex": "/^AS/"} ,firstName:"FIRST"}).collation({ locale: 'en_US', strength: 1 })

正則表達式是一個「前綴表示」如果以尖號開始(^)或左錨(\ A),後跟一串簡單的符號。例如,正則表達式/^abc。 /將通過僅匹配以abc開頭的索引值進行優化。 另外,雖然/^a /,/^a。 /和/^a。 $ /匹配等效字符串,它們具有不同的性能特徵。如果存在適當的索引,所有這些表達式都使用索引;不過,/^a。 /和/^a.*$/較慢。/^ a /可以在匹配前綴後停止掃描。

regex

+0

你好,你的建議是相同的查詢像在原來的職位(案例3)。它採取相同的100秒。 –

+0

好吧,我把小屋^放在你把它放在外面的模式裏面。無論如何,如果這不幫助嘗試爲每個字段創建不同的索引,而不是合併索引 –