レポート目的でデータを読み取りたい。現在、別のテーブルの計算データを使用してテーブルにデータを入力し、データを入力したテーブルからレポート用のデータを読み取ります。私の現在のロジックは、すべてトランザクション内で古いデータを削除し、新しいデータを挿入することです。
アップデート
要件
1) 以下のロジックは、毎秒 1 回実行することです。他のプロセスも同じリフレッシュ レートで tableB を更新することに注意してください。
2) TableB はレポート目的で使用されます。TableA と TableB は異なるデータベースに存在します。
3) TableB には約 1,000 万行が含まれており、以下のコードによって毎秒 1 回、約 400 万行が更新されます。他のプロセスは、tableB のデータの他の部分 (6 = 10-4 百万) も同じリフレッシュ レートで更新します。
私の懸念は次のとおりです。
1) 3 つのステートメントが同様の sum 句と where 句を使用していますが、これは改善される可能性があります。
2) tableB に更新する tablea には、約 100 万から 200 万の行があります。明示的な一時テーブルを使用すると、速度が低下する場合があります。
3) トランザクションを使用すると速度が低下する可能性がありますが、それが唯一の方法のようです。
4) データを更新することは、削除して挿入するよりも優れたオプションである可能性があります (どちらを選択する必要がありますか?)
よりパフォーマンスの高い方法を見つけたいです(テーブルの再設計などを含む)。以下は現在の方法です。
以下の疑似コード:
start/begin transaction here
DELETE from tableb data that I want to insert below, e.g. delete data where Code = 'code'
INSERT INTO tableb(Code, Total)
SELECT sum(a.Code, price)
FROM tablea a
GROUP BY a.Code;
IINSERT INTO tableb(Code, Total)
SELECT sum(a.Code price) -- use price
FROM tablea a
WHERE a.meanPrice IS NOT NULL
GROUP BY a.Code;
INSERT INTO tableb(Code, Total)
SELECT sum(a.Code, meanPrice ) -- use meanPrice
FROM tablea a
WHERE a.meanPrice IS NOT NULL
GROUP BY a.Code;
Commit transaction here
これは MySQL 用ですが、理想的には汎用である必要があります。
何か案が?