如何防止3个嵌套的MySQL查询超时

时间:2013-07-11 09:48:38

标签: mysql

我想删除t3中缺少t2中字段名称的所有记录,但前提是它们符合t1中的某个记录ID。

t1的查询:

SELECT MAX(id) FROM t1 WHERE name1 = "XXX" AND user_id = '$id'

工作正常。

t2查询:

SELECT name2 FROM t2 WHERE record IN (SELECT MAX(id) FROM t1 WHERE name1 = "XXX" AND user_id = '$id')

也可以,但需要一段时间。

但是t3查询:

DELETE FROM t3 WHERE name3 NOT IN (SELECT name2 FROM t2 WHERE record IN (SELECT MAX(id) FROM t1 WHERE name1 = "XXX" AND user_id = '$id'));

导致“#2006 - MySQL服务器已经消失”

如何在合理的时间内获取查询结果?

2 个答案:

答案 0 :(得分:1)

我认为你可以改用连接查询吗?

select name2, MAX(t1.id) 
from t2
inner join t1
on t2.t1_id = t1.id
where name1="XXX" AND user_id='$id'

答案 1 :(得分:0)

您可以使用子查询来准备要删除记录的表 - 在存储过程或类似的情况下。

当然索引;)