私のGoogleクラウドSQLテーブルには現在1126571行あり、毎日最低3万行追加されています。クエリを実行すると:
select count(distinct sno) as tot from visits
次のエラーが生成されます。
Error 0: Unable to execute statement
. Cloud SQL Query は 60 秒を超える例外の責任がありますか。テーブルが大きくなったときの問題をどのように克服できますか。
私のGoogleクラウドSQLテーブルには現在1126571行あり、毎日最低3万行追加されています。クエリを実行すると:
select count(distinct sno) as tot from visits
次のエラーが生成されます。
Error 0: Unable to execute statement
. Cloud SQL Query は 60 秒を超える例外の責任がありますか。テーブルが大きくなったときの問題をどのように克服できますか。
テーブルを 2 つのテーブルに分割します。1 つは新しい訪問を受け取ります... トランザクション ... 1 つはレポート用です。レポート テーブルにインデックスを付けます。定期的にデータを転送して消去します。
トランザクション テーブルは比較的小さいままであるため、カウントが高速になります。インデックスがあるため、レポート テーブルのカウントが高速になります。
INDEX
列にを追加するsno
と、パフォーマンスが向上します。
ALTER TABLE visits ADD INDEX (sno)
選択クエリを多くの部分に分割するようにしてください。たとえば、最初の選択クエリは 50000 に制限する必要があり、2 番目の選択クエリは 50000 から開始して 50000 に制限する必要があります。
このシナリオでそれを行うことができます:
1- レコード数を取得します。
2-ループを作成し、レコード数で終了させます。
3-ループごとに、選択クエリで50000レコードを選択し、結果をデータテーブルに追加します(プログラミング言語によって異なります)
4- 次のループでは、前のループが終了した場所から選択を開始する必要があります。たとえば、2 番目のクエリでは次の 50000 レコードを選択する必要があります。
次の SQL クエリ ステートメントで選択開始インデックスを指定できます。
SELECT * FROM mytable somefield LIMIT 50000 OFFSET 0;
次に、必要なデータ全体を取得します。
注 : テストを行って、60 秒でロードできる最大レコード数を確認してください。これにより、ループが減少し、パフォーマンスが向上します。