2017-03-17 14 views
-2

私は〜600Mの行を削除しようとし、それは非常に高い負荷で24時間走った。削除はどのくらい正確に機能しますか?

私が興味を持っているのは、データがディスクにどのように格納されているか、そして削除が発生したときに実際に何が起こるかを考慮した内部です。

答えて

-1

レコードを選択的に削除すると、crateはすべてのデータに対して反復処理を行う必要があります。大量のデータを削除する場合は、これをサポートするパーティションスキーマを選択することをお勧めします。

例えば:

CREATE TABLE IF NOT EXISTS "tsdata" (
    "ts" TIMESTAMP, 
    "sensor_id" INT, 
    "temperature" FLOAT 
    "gen_day_partition" TIMESTAMP GENERATED ALWAYS AS date_trunc('day', "ts") 
) 
PARTITIONED BY ("gen_day_partition") 

はそうあなたが発行した場合:

DELETE FROM "tsdata" WHERE "gen_day_partition" < 1489759756 

が、それは今日より若いデータを保持するすべてのパーティションを削除します。

あなたが発行した場合:

DELETE FROM "tsdata" WHERE "temperature" < 23.4 

を大量のデータをタッチする必要があるため、それは、高価な操作です。

+0

お返事ありがとうございます。そうです、私は反復と分割を理解しています。もっと正確に質問を更新します。私が興味を持っているのは、データがディスク上にどのように格納されているのか、そして削除が発生したときに実際に何が起こるべきかを考える内部構造です。 – nicerobot

関連する問題