私はテーブルの上に簡単な更新クエリを実行します。大きなテーブルの単純なクエリはなぜずっと遅いのですか?
UPDATE table_x SET col_a = (col_b AT TIME ZONE 'UTC') AT TIME ZONE col_tz;
table_xは100のエントリで構成され、クエリが数ミリ秒かかります。
- > 100,000エントリ= 2秒。
- > 1,000,000エントリ= 20秒。
これまでのところとても良いです。しかし、テーブルが20Mエントリで構成されている場合、クエリは永遠に実行されます。誰かがこれの理由を知っていますか?そしてこれを克服するために何ができるでしょうか?
多分、私は自分のコンピュータに約13 GBの空きディスク容量しかないと付け加えるべきです。
それはトランザクション内で起こることがあります。すべての更新が完了または辞退しなければなりません。したがって、トランザクションや小さなサブセットで文を実行することができます。 – Justas
私はあなたが1つのトランザクション内で非常に多くのレコードを更新すべきではないと思っています。私はFirebirdを使用しており、同じように動作します。私がデータベースに書き込む必要があるとき(UPDATE、INSERT、DELETE)、私は50000以上のレコードを変更しないよう注意しますが、変更されるデータに依存します。基本的に、1つのトランザクション内で1Mレコードを決して変更しないでください。 –
20M操作で交換していますが、1M操作で交換していないかどうか確認できますか? –