API呼び出しのレスポンスで「パフォーマンスの低いクエリ - 行が多すぎます」という例外が表示されるのはなぜですか?
環境:
Connect Web Services SOAP(CWS)API、REST API、Connect for PHP API、ROQL、すべての製品バージョン
回避策:
Oracle B2C ServiceパブリックAPIの1つからROQLクエリを実行すると、クエリによってスキャンされたデータベーステーブルの行の推定が実行されます。 この見積りは、データベースを保護し、データベースからの一貫性と信頼性の高い応答時間を確保するための安全性チェックとして実施されています。この見積もりは、返される行数ではなく、スキャンが必要な行数です。
事前スキャンが大きすぎると判断された場合、「実行中のクエリが不適切 - 検査済みの行が多すぎます」という例外が表示されます。異なるデータベースには、さまざまなしきい値(最大結合サイズ)があります。パブリックAPIの1つからクエリが実行された時に事前スキャンによって許可される量は、次のとおりです。
オペレーショナルデータベース - 2,000,000
レプリケーションデータベース - 5,000,000
注:これらは必須の設定であり、変更することはできません。
ROQLを使用した要求は、オペレーショナルデータベースまたはレプリケーションサーバーのいずれかに移動するように構成できます。レプリケーション・サーバーは、運用データベースの正確なコピーですが、運用データベースから実行するには大きすぎるクエリ(レポートで使用されるクエリを含む)を処理するように設計されています。このため、時間が遅れることがあります。
ROQLクエリの実行中にこのようなエラーが発生した場合は、クエリを再度実行する前にクエリを最適化することをお勧めします。 WHERE句を追加すると、WHERE句にフィルタを追加したり追加したりできます。問合せにLIMITを含めると、出力で返される行数のみが制限されるため、事前スキャンには影響しません。
Answer 12091: Can't perform a select statement even with small limit in ROQL
データベースインデックスも役立ちます。カスタムフィールドインデックスはコンソールから追加することができ、標準フィールドのインデックスは、クラウドエンジニアリングリソースに従事するテクニカルサポートへのSRで分析および実装できます。標準フィールドにインデックスを追加するために使用されるプロセスの詳細については、以下を参照してください。 Answer ID 8702: Working with Technical Support to analyze for and implement database indexes.
ほか追加テクニカル情報はこちらもご参照ください。 Answer ID 7220: テクニカルドキュメントおよびサンプル・コード .