2016-07-27 3 views
1

私はcouchbase dbからデータを読み込むためにN1QLを使用していましたが、パフォーマンスが非常に悪くなりました。私はviews atmで作業していますが、なぜこれが起こるのか誰かが知っていれば、私は知ってうれしく、多分私はN1QLに戻るでしょう。ページングは​​2Mレコード(ただし動作​​します)では非常に遅いですが、ページ指定された検索は@ 2Mレコードのタイムアウトになります。 CouchbaseのCE 4.1.0N1QLのパフォーマンスが悪い

ここでは、クエリです:

public static function findByPage($recordsPerPage, $page) { 
     $query = CouchbaseN1qlQuery::fromString('SELECT * FROM `public_portal` WHERE `collection`=$collection ORDER BY `_id` LIMIT $limit OFFSET $offset'); 
     $query->options['$collection'] = static::COLLECTION_NAME;  
     $query->options['$limit'] = $recordsPerPage;   
     $query->options['$offset'] = $recordsPerPage*($page-1);  
     return self::doQueryAndGetObjects($query); 
    } 

インデックス:

CREATE INDEX `public_portal_collection` ON `public_portal`(`collection`) USING GSI; 

CREATE INDEX `public_portal_id` ON `public_portal`(`_id`) USING GSI; 

を説明マイ:

cbq> EXPLAIN SELECT * FROM `public_portal` WHERE `collection`="tree" ORDER BY `_id` LIMIT 24 OFFSET 24; 
{ 
    "requestID": "ab6df326-8f33-48b6-84a4-c22ac394f803", 
    "signature": "json", 
    "results": [ 
     { 
      "#operator": "Sequence", 
      "~children": [ 
       { 
        "#operator": "Sequence", 
        "~children": [ 
         { 
          "#operator": "IndexScan", 
          "index": "public_portal_collection", 
          "keyspace": "public_portal", 
          "namespace": "default", 
          "spans": [ 
           { 
            "Range": { 
             "High": [ 
              "\"tree\"" 
             ], 
             "Inclusion": 3, 
             "Low": [ 
              "\"tree\"" 
             ] 
            } 
           } 
          ], 
          "using": "gsi" 
         }, 
         { 
          "#operator": "Parallel", 
          "~child": { 
           "#operator": "Sequence", 
           "~children": [ 
            { 
             "#operator": "Fetch", 
             "keyspace": "public_portal", 
             "namespace": "default" 
            }, 
            { 
             "#operator": "Filter", 
             "condition": "((`public_portal`.`collection`) = \"tree\")" 
            }, 
            { 
             "#operator": "InitialProject", 
             "result_terms": [ 
              { 
               "expr": "self", 
               "star": true 
              } 
             ] 
            } 
           ] 
          } 
         } 
        ] 
       }, 
       { 
        "#operator": "Order", 
        "sort_terms": [ 
         { 
          "expr": "(`public_portal`.`_id`)" 
         } 
        ] 
       }, 
       { 
        "#operator": "Offset", 
        "expr": "24" 
       }, 
       { 
        "#operator": "Limit", 
        "expr": "24" 
       }, 
       { 
        "#operator": "FinalProject" 
       } 
      ] 
     } 
    ], 
    "status": "success", 
    "metrics": { 
     "elapsedTime": "6.755603ms", 
     "executionTime": "6.573912ms", 
     "resultCount": 1, 
     "resultSize": 2972 
    } 
} 

をこれは4000x5レコードで行われました。

「コレクション」は「タイプ」と呼ばれるものです。

答えて

1

クエリは、制限値が小さいにもかかわらず、ドキュメントを返す前にすべてのレコードと並べ替えをフェッチし、制限時間がかかっているため、クエリベースの並べ替えとクエリエンジンを使用します。

あなたはどのようなタイムアウトを見ていますか?インデクサまたはクエリからのものですか。タイムアウトメッセージを投稿できますか?

4.5.0では、このタイプのクエリーがはるかに優れています。

+0

何らかの理由でタイムアウトがなくなり、何も返されません。それはORDER BYなしで少し速いですが、私はそれが必要です。私は4.5.0を待つだろう。 –

関連する問題