2015-11-26 4 views
0

У меня есть небольшая база данных Mongo с записями ~ 30k. Простой запрос, который использует 5-6 параметров, занимает почти секунду (учитывая, что весь БД находится в ОЗУ). Может ли кто-нибудь предположить, что я делаю неправильно?Как улучшить/оптимизировать скорость запроса MongoDB?

2015-11-26T18: 41: 29,540 + 0200 [CONN3] Команда vvpilotdb2 $ CMD Команда:. Количество {кол: "TestResults", запрос: {Test: 5.0, ISAC: правда, INPUTMODE: 0.0, IsOfficialTest: true, IsSanity: false, IsStress: false, IsUnderNoise: false, MetalRodSize: 9.0}, поля: {}} planSummary: COLLSCAN keyUpdates: 0 numYields: 1 locks (micros) r: 1397227 reslen: 48 944ms

Адрес db.stats(). Я сам не присвоил никаких индексов. все настройки - по умолчанию .:

> db.stats() 
{ 
     "db" : "vvpilotdb2", 
     "collections" : 5, 
     "objects" : 28997, 
     "avgObjSize" : 7549.571610856296, 
     "dataSize" : 218914928, 
     "storageSize" : 243347456, 
     "numExtents" : 17, 
     "indexes" : 3, 
     "indexSize" : 964768, 
     "fileSize" : 469762048, 
     "nsSizeMB" : 16, 
     "dataFileVersion" : { 
       "major" : 4, 
       "minor" : 5 
     }, 
     "extentFreeList" : { 
       "num" : 0, 
       "totalSize" : 0 
     }, 
     "ok" : 1 
} 
+0

Что такое объяснить этот запрос? Вам не хватает некоторых индексов? –

+1

Можете ли вы запустить объяснение в симпатичном режиме? Его невозможно прочитать эту длинную линию. Тем не менее, ответ на оптимизацию в Монго почти всегда (1) правильная индексация и (2) осколки –

+0

Извините, я новичок в Mongo. Я не знал, что этот запрос объяснил, я искал его, вот объяснение запроса, который я выполняю (я использую 32-битную версию mongo 2.6 на моей старой машине Win7. Здесь запрос выполняется> в 2 раза быстрее ~ 400 мс . не знаю, почему ' "курсор":. "BasicCursor", "isMultiKey": ложные, "п": 30, " nscannedObjects": 27772, "nscanned": 27772, "nscannedObjectsAllPlans": 27772 , "nscannedAllPlans": 27772, "scanAndOrder" ложь, "indexOnly" ложь, "nYields": 216, "nChunkSkips": 0, "Миллис": 380, "сервер": «Майк -PC: 27017 ", " filterSet ": false' – Mike

ответ

1

В MongoDB, то _id поле индексируется по умолчанию.

Необходимо указать поле, которое вы будете использовать для запроса. Составные индексы также могут быть созданы на нескольких полях и порядке для них (по возрастанию/убыванию).

Вот документация для тех же:

https://docs.mongodb.org/manual/indexes/

Смежные вопросы