、およびのCalls
3 つの列を持つテーブルがあります。messageType
callId
lastModified
呼び出しごとに、メッセージごとに 1 行ずつ、合計 4 行が DB に書き込まれます。メッセージには、 CALL -SETUP、CALL-PROGRESS、CALL-START、CALL-STOP (コード 4)の 4 種類があります。
列messageType
とcallId
主キーを構成します。
次の行を削除したい:
- 終了した通話に対応する行。CALL-STOP メッセージが DB に書き込まれると、通話が終了します。
- 4 時間以降変更されていない行 (たとえば)。
次のクエリを使用しました。
DELETE FROM Calls WHERE callId IN (SELECT * FROM (SELECT DISTINCT callId FROM Calls WHERE messageType=4 OR TIMESTAMPDIFF(SECOND,lastModified,NOW()) > 14400) AS tmp);
このステートメントは、テーブルをクリーンアップするためだけに使用します。しかし同時に、テーブルは を使用して大きなファイル (約 30000 行) によって非常に頻繁に (たとえば毎秒)LOAD DATA INFILE
データが取り込まれます。データのロードのみとデータのロード + クリーンの間のパフォーマンスの違いが実際にわかります。
パフォーマンスを向上させるにはどうすればよいですか? SQL DELETE で? DB自体に?
私はMySQLを使用していると正確に言います。
ありがとう