我试图在MYSQL (Amazon )中运行一个多表更新,它非常慢。
我想做什么?
根据1小时的时间框架删除所有重复行。
下面我创建了一个临时表来标识表中重复的行。此查询在2秒内运行。
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
CREATE TEMPORARY TABLE tmpIds (id int primary key);
INSERT into tmpIds
SELECT distinct
d.id
FROM api d INNER JOIN api orig
on d.domain_id = orig.domain_id and d.user_id = orig.user_id
WHERE
orig.created_at < d.created_at
AND d.created_at <= DATE_ADD(orig.created_at, Interval 1 hour)
AND d.type = 'api/check-end'
AND d.created_at >= '2016-08-01';
SET TRANSACTION ISOLATION LEVEL READ COMMITTED ;问题是在生产服务器上运行需要很长时间的更新查询。它还锁定api表。
SET @TRIGGER_DISABLED = 1;
UPDATE
api
SET
deleted_at = now()
WHERE type = 'api/check-end' AND created_at >= '2016-08-01'
AND id IN (SELECT id FROM tmpIds);
SET @TRIGGER_DISABLED = 0;我也尝试过这个版本:
SET @TRIGGER_DISABLED = 1;
UPDATE
api a,
tmpIds ti
SET
a.deleted_at = now()
WHERE
type = 'api/check-end' AND created_at >= '2016-08-01' AND a.domain_id < 10 AND a.id = ti.id;
SET @TRIGGER_DISABLED = 0;STATS
发布于 2016-11-12 18:53:13
问题是:
SET @TRIGGER_DISABLED = 1;没有禁用触发器。我不得不删除api表上的更新触发器,更新运行时间为1.3秒。
在运行查询时,对禁用触发器的最佳方法有帮助吗?
https://stackoverflow.com/questions/40564983
复制相似问题