Mysql删除语句执行时间慢如何优化
由于业务需求需同步处理订单数据,Mysql语句如下:
DELETE FROM `order` WHERE `order_id` IN ('123', '456') AND status IN ('A0003', 'A0005');
order_id的范围会比较大,大概几个到几十个不等。
目前观测到慢日志,该删除操作会产生很多慢查询,平均每秒1-2秒,该表目前有500W。
索引情况:
请问针对该SQL有什么样的优化建议
「平均每秒 1-2 秒」啥意思?每次查询 1 - 2 秒?
status
字段也加索引试试123
456
这些字符串改为数字IN
改为JOIN
关联:@LiamHao 是的,每次执行delete1-2秒左右。加个order_id,status的联合索引?
因为你查询范围过大锁表导致的吧,不要直接删,可以先查询出来,然后用
where in id
来删除。建议先查,存在再进行删除
orderid和status都命中试试看???
可以检查该表增删操作是否很多,是的话可能会有碎片,可以使用 optimize table 去优化表
@muggle 阿里云给出的碎片率2%
建议加范围删除。如果慢是因为数据太多的话。就只能分多次删除啦。比如分十次删除。这样就好啦