簡體   English   中英

MongoDB $ IN查詢性能問題

[英]MongoDB $IN query performance issue

感謝你的幫助。

我有一個具有此統計信息的集合,我得到了700百萬條看起來像這樣的記錄

db.flight_availabillity.findOne(){“ _id”:ObjectId(“ 5226465fc3b53d4f249c19fc”),“ flight_id”:9803,“到達”:1384819200,“持續時間”:1,“容量”:1,“房間”:1,“ min_price”:163,“ min_price_packaged”:50,“ rates_has_wifi”:1,“ rates_has_baby_cot”:1,“ rates_has_pets_allow”:1,“ erank”:0.25}

當我進行查詢時,我只對4個字段進行查詢,因此我建立了一個類似於db.flight_availabillity.ensureIndex({“ flight_id”:1,“到達”:1,“持續時間”:1,“容量”:1的索引, “房間”:1})

問題:僅發送1個航班ID時,find({“ flight_id”:{$ in:[236]})結果很快

當使用多個航班ID時,find({“ flight_id”:{$ in:[236,232,545,757]})(並且查詢中最多可以有1000個航班ID)。 我得到較慢的結果。

這是其中一個用了3.5秒的解釋,但我也用了10秒

db.flight_availabillity.find({“ flight_id”:{$ in:[333,207731,33993,277,127,183345,169019,156473,92715,5046,2927,2473,2112,2024,281,264,185,125,95,80,208065, 183074,31774,359,314,64010,56170,5107,4673,147,115571,214,101564,287,66356,128,194487,100,207984,66353]},“到達”:1384387200,“持續時間”:1, “ capacity”:1,“ rooms”:1})。explain(){“ cursor”:“ BtreeCursor flight_id_1_arrival_1_departure_1_capacity_1_rooms_1 multi”,“ isMultiKey”:false,“ n”:40,“ nscannedObjects”:240,“ nscanned”: 358,“ nscannedObjectsAllPlans”:597,“ nscannedAllPlans”:715,“ scanAndOrder”:false,“ indexOnly”:false,“ nYields”:0,“ nChunkSkips”:0,“ millis”:4,....}

我想念什么? 如何查詢並獲得快速結果?

謝謝 !

在某些MongoDB版本中,$ in不使用索引-Mongo也有一個限制,即對同一查詢使用多個索引。

您查詢的內容包括flight_id,到達時間,持續時間,容量和房間。 嘗試設置一個包含到達時間,持續時間,容納人數和房間的索引,這將為您提供具有選擇性標准的良好索引,而不是將所有字段都放入。

在根據選擇標准進行了艱苦的工作之后,flight_id才是最終選擇。

同樣,如果沒有粘貼indexBound也無濟於事,它可能會為線索組成是否最佳提供線索。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM