これは少し奇妙なものです。特定の要素が存在するかどうかを確認するクエリを使用して、非常に大きなデータベースを反復処理しています。ヒントなしでデータベースでこのクエリを実行すると、約 137 秒かかりますが、ヒントを使用すると 0 になります (これは明らかに望ましいことです)。php経由で利用する場合
$collection->find($params)->hint(array("responses" => 1))->count();
そして、私がこれを取得しているクエリをプロファイリングします:
{ "ts" : ISODate("2012-05-08T10:11:24.682Z"), "op" : "コマンド", "ns" : "ey_gsat.$cmd", "コマンド" : { "カウント" : " survey_answers", "クエリ": { "responses.93": { "$exists": true }, "responses.96": { "$exists": true }, "responses.99": { "$exists": true }, "responses.102" : { "$exists" : true }, "responses.105" : { "$exists" : true }, "responses.108" : { "$exists" : true }, "responses .111" : { "$exists" : true }, "responses.114" : { "$exists" : true }, "responses.117" : { "$exists" : true }, "responses.120" : { "$exists" : true }, "response.1": { "$exists": true } } }, "ntreturn": 1, "responseLength": 48, "millis": 137, "client": "127.0.0.1", "user": "" }
PHP経由で実行した場合、クエリが実際にインデックスを使用している兆候はありません。私はこのサイトでこのようなクエリをかなりの数実行しているため、137 ミリ秒がすべて加算されるため、それらを最適化したい理由があります。何が間違っているのでしょうか?