SQL を使用してデータをクエリし、データテーブル内のスキャンされた行数またはスキャンされたデータサイズが上限を超えている場合は、クエリ条件に基づいてセカンダリインデックスまたは検索インデックスを作成して、クエリのパフォーマンスを向上させることができます。
問題の説明
SQL を使用してデータをクエリすると、次のエラーメッセージが表示されます。
[Message]:The sql scanned rows of main table exceeds the quota, main table rows quota is 100000
考えられる原因
SQL を使用してデータをクエリするときに、パーティションキー以外のものをクエリ条件として使用すると、テーブル全体のデータがスキャンされます。スキャンされた行数またはスキャンされたデータサイズが上限を超える場合があります。
SQL ステートメントを実行して行う単一のスキャン操作では、スキャンされた行数の上限は 100,000、スキャンされたデータサイズの上限は 128 MB、スキャン時間の上限は 30 秒です。
解決策
SQL を使用してデータをクエリする場合は、クエリ条件にプライマリキー列が含まれており、左端一致の原則を満たしていることを確認してください。また、SQL ステートメントで limit パラメーターを使用して、返される最大行数を指定してください。
クエリ条件にプライマリキー列が含まれていない場合、または左端一致の原則を満たしていない場合は、次のいずれかの方法を使用してクエリを高速化できます。詳細については、インデックス選択ポリシーを参照してください。
セカンダリインデックスを作成して、クエリ条件にセカンダリインデックスのプライマリキー列を含めることができ、クエリ条件が左端一致の原則を満たしている場合は、セカンダリインデックスを作成してクエリを高速化します。詳細については、概要を参照してください。
COUNT、SUM、AVG などの集計関数を指定する場合、またはクエリ条件でプライマリキー列以外の列に基づいてフィルター条件を指定する場合は、検索インデックスを作成してクエリを高速化します。詳細については、概要を参照してください。
データテーブルの検索インデックスを作成してもエラーが解決しない場合は、検索インデックスにクエリに使用されるフィールドが含まれているかどうかを確認してください。