2016-05-31 5 views
2

私はCouchbase 4.1を使用しているプロジェクトで作業しており、N1QLを使用してドキュメントをクエリしようとしています。問題は、インデックスを作成しても非常に遅いようです。クエリは〜11000のドキュメントで約2秒かかります。CouchbaseのN1QLクエリが実際に遅い

問い合わせ:マイドキュメントはこのように見ている

SELECT name, displayName, imageId, childCategories FROM `bd-couchbase` WHERE assortment = 'CategoryAssortmentOne' AND categoryPath = 'category-displayname/subcategory-displayName' AND displayName IS NOT MISSING 

:私が説明し実行すると

CREATE INDEX `category_idx` ON `bd-couchbase`((meta().`id`),`name`,`displayName`,`imageId`,`categoryPath`,`childCategories`,`assortment`) USING GSI; 

が、私はそれを見ることができます:私は、次のインデックスを持っている

{ 
    "parentName": "8442", 
    "categoryPath": "category-displayname/subcategory-displayName", 
    "lastUpdated": "2016-05-31T11:02:03.5129252+02:00", 
    "childCategories": [ 
    { 
     "name": "0041", 
     "displayName": "Category 1", 
     "imageId": "0041" 
    }, 
    { 
     "name": "0042", 
     "displayName": "Category 2", 
     "imageId": "0042" 
    }, 
    { 
     "name": "0043", 
     "displayName": "Category 3", 
     "imageId": "0043" 
    }, 
    { 
     "name": "0044", 
     "displayName": "Category 4", 
     "imageId": "0044" 
    }, 
    { 
     "name": "0045", 
     "displayName": "Category 5", 
     "imageId": "0045" 
    }, 
    { 
     "name": "0046", 
     "displayName": "Category 6", 
     "imageId": "0046" 
    } 
    ], 
    "assortment": "CategoryAssortmentOne", 
    "name": "0040", 
    "displayName": "MyCategory", 
    "imageId": "0040" 
} 

#primaryインデックスを使用してフェッチを実行します(これはクエリの遅い部分だと思います)。しかし、私が作成したインデックスは、それを使用することになっていますか?

私の説明の結果:

{ 
    "requestID": "da1946f3-5cc8-4d1e-a05b-06789aa6be92", 
    "signature": "json", 
    "results": [ 
     { 
      "#operator": "Sequence", 
      "~children": [ 
       { 
        "#operator": "PrimaryScan", 
        "index": "#primary", 
        "keyspace": "my-couchbase", 
        "namespace": "default", 
        "using": "gsi" 
       }, 
       { 
        "#operator": "Parallel", 
        "~child": { 
         "#operator": "Sequence", 
         "~children": [ 
          { 
           "#operator": "Fetch", 
           "keyspace": "my-couchbase", 
           "namespace": "default" 
          }, 
          { 
           "#operator": "Filter", 
           "condition": "((((`my-couchbase`.`assortment`) = 
\"CategoryAssortmentOne\") and ((`my-couchbase`.`categoryPath`) = \"category-displayname/subcategory-displayName\")) and ((`my-couchbase`.`displayName`) is not missing))" 
          }, 
          { 
           "#operator": "InitialProject", 
           "result_terms": [ 
            { 
             "expr": "(`my-couchbase`.`name`)" 
            }, 
            { 
             "expr": "(`my-couchbase`.`displayName`)" 

            }, 
            { 
             "expr": "(`my-couchbase`.`imageId`)" 
            }, 
            { 
             "expr": "(`my-couchbase`.`childCategorie 
s`)" 
            } 
           ] 
          }, 
          { 
           "#operator": "FinalProject" 
          } 
         ] 
        } 
       } 
      ] 
     } 
    ], 
    "status": "success", 
    "metrics": { 
     "elapsedTime": "13.6696ms", 
     "executionTime": "13.6696ms", 
     "resultCount": 1, 
     "resultSize": 2089 
    } 
} 

任意の提案ですか?

ありがとうございます。

答えて

3

クエリサービスは、インデックスとクエリを一致させることができないようです。 meta.idをインデックスに含めた特定の理由はありますか? assortmentcategoryPathdisplayName、それがその後EXPLAINで言及されます場合は以下を参照してください

は、あなたのWHERE句で使用するフィールドのみをカバーするために、インデックスを再定義してみてください。

CREATE INDEX category_idx ON `bd-couchbase`(assortment, categoryPath, displayName, imageId, childCategories, name); 
+1

CREATE INDEX category_idx ON \ 'bd-couchbase \'(カテゴリ、categoryPath、displayName、imageId、childCategories、name); – geraldss

+0

さて、私はWHEREステートメントに使用するフィールドのみを含めることになっていますか?私は明日それを試してみる。 – Martin

+2

いいえ、問題はCREATE INDEXのフィールドの順序です。 – geraldss

関連する問題