7

私のGoogleクラウドSQLテーブルには現在1126571行あり、毎日最低3万行追加されています。クエリを実行すると:

select count(distinct sno) as tot from visits

次のエラーが生成されます。

Error 0: Unable to execute statement 

. Cloud SQL Query は 60 秒を超える例外の責任がありますか。テーブルが大きくなったときの問題をどのように克服できますか。

4

3 に答える 3

1

テーブルを 2 つのテーブルに分割します。1 つは新しい訪問を受け取ります... トランザクション ... 1 つはレポート用です。レポート テーブルにインデックスを付けます。定期的にデータを転送して消去します。

トランザクション テーブルは比較的小さいままであるため、カウントが高速になります。インデックスがあるため、レポート テーブルのカウントが高速になります。

于 2012-12-29T20:43:27.433 に答える
0

INDEX列にを追加するsnoと、パフォーマンスが向上します。

ALTER TABLE visits ADD INDEX (sno)
于 2012-10-19T09:09:02.360 に答える
0

選択クエリを多くの部分に分割するようにしてください。たとえば、最初の選択クエリは 50000 に制限する必要があり、2 番目の選択クエリは 50000 から開始して 50000 に制限する必要があります。

このシナリオでそれを行うことができます:

1- レコード数を取得します。

2-ループを作成し、レコード数で終了させます。

3-ループごとに、選択クエリで50000レコードを選択し、結果をデータテーブルに追加します(プログラミング言語によって異なります)

4- 次のループでは、前のループが終了した場所から選択を開始する必要があります。たとえば、2 番目のクエリでは次の 50000 レコードを選択する必要があります。

次の SQL クエリ ステートメントで選択開始インデックスを指定できます。

SELECT * FROM mytable somefield LIMIT 50000 OFFSET 0;

次に、必要なデータ全体を取得します。

注 : テストを行って、60 秒でロードできる最大レコード数を確認してください。これにより、ループが減少し、パフォーマンスが向上します。

于 2014-07-21T05:19:12.623 に答える