2012-05-08 2 views
1

Это немного странно. Я выполняю итерацию через довольно большую базу данных, используя запрос, который проверяет наличие определенных элементов. запуск этого запроса в базе данных без подсказки занимает около 137 секунд, но с подсказкой он опускается до 0 (что предпочтительнее obv). При его использовании с помощью PHPMongoDB подсказка не работает

$collection->find($params)->hint(array("responses" => 1))->count(); 

и профилирование запросов я получаю это:

{ "ц": ISODate ("2012-05-08T10: 11: 24.682Z"), " op ":" command "," ns ": " ey_gsat. $ cmd "," command ": {" count ":" survey_answers "," query ": { " answers.93 ": {" $ exists ": true}, "answers.96": {"$ exists": true}, "answers.99": {"$ exists": true}, "answers.102": { "$ exists": true}, "response.105": {"$ exists": true}, "answers.108": {"$ exists": true}, "r esponses.111 ": {" $ exists " : true}," answers.114 ": {" $ exists ": true}," answers.117 ": { " $ exists ": true}," answers.120 ": {" $ exists ": true}, " answers.1 ": {" $ exists ": true}}}," ntoreturn ": 1, " responseLength ": 48," millis ": 137," client ":„127.0.0.1“,„пользователь“ :„“}

Там нет никаких признаков запроса на самом деле с помощью индекса при запуске с помощью PHP. У меня есть довольно много запросов, подобных этому на этом сайте, поэтому 137 миллисекунд все складываются, поэтому я и хочу их оптимизировать. какие идеи могут быть неправильными?

+0

Все, что я могу сказать, это *** новая технология *** – Petah

+1

PHP-драйвер с легкостью отбрасывает намек, работает ли это в оболочке? – kristina

+0

Я дважды проверял все сценарии, и, как подсказка, похоже, ускоряет обычный запрос поиска, всякий раз, когда я добавляю счет, он игнорирует индексы. что желаемое поведение? есть ли способ использовать индексы для ускорения моих вычислений? –

ответ

0

Это известное ограничение в счете: https://jira.mongodb.org/browse/SERVER-2677. Возможно, вам захочется следовать за этим вопросом. К сожалению, нет обходного пути. Возможно, вам захочется заглянуть в кеширование счета, когда это возможно, или оценить общее количество.

+0

большое спасибо! –

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