2016-05-13 9 views
0

python-cloudantで3つのセレクタを使用してデータベースにクエリを実行すると、クエリの実行に15秒かかります。制限を2にすると(下のコードを参照)、結果は非常に速く表示されますが、2の後にはかなり時間がかかります。現在、このデータベースには約190,000件の文書があります。私はこれをスピードアップできる何かを逃していますか?Python-cloudantのクエリ速度が遅いですか?

query = cloudant.query.Query(db,selector={'_id': {'$gt': 0},'userid':{'$eq':'56900'},'year':{'$eq':'[2011]'}},fields=['_id','userid','year'],sort=['_id'],limit=2) 
for doc in query()['docs']: 
    print doc 

(このクエリの目標は含まれていたユーザーIDからすべてのレコード「56900」「[2011]は、」年フィールドで取得し、_idによってそれらを並べ替えることです)

+0

userIdフィールドにインデックスが設定されていますか?チャンスがない場合は、DBがすべてのドキュメントをフルスキャンするように強制しています。 – rhyshort

+0

@rhyshort正しくない可能性があります。私は、次を追加しましたが、それは、クエリをスピードアップしません: "JSON:ユーザーID、今年" { "タイプ": "JSON"、 "DEF":{ "フィールド":[ { 「ユーザーID ":" asc " } { " year ":" asc " } – pynewb

+1

クエリからフルスキャンを開始するiircを削除してみてください。{'$ gt':0}すべてのドキュメントには – rhyshort

答えて

1

コメントを1として質問に。それが遅い理由は、セレクタの'_id': {'$gt': 0}部分がすべてのドキュメントをスキャンして残りのセレクタと一致するかどうかを調べることです。この句を削除して、フィールドuseridyearを索引付けすると、大幅に増加します。

関連する問題