我有一个Calls
包含 3 列的表messageType
:callId
和lastModified
。
对于每次调用,在 DB 中写入 4 行,每条消息一个。有 4 种类型的消息:CALL-SETUP、CALL-PROGRESS、CALL-START和CALL-STOP(代码 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?在数据库本身?
我确切地说我使用MySQL。
谢谢