我有两个表:食物和moos。mySQL删除查询优化
- FOOS被索引的起始日期
- 莫斯已经foos.id作为外键
FOOS非常大(数百万条记录)。 moos不是(10万条记录)。
我需要做一些相当简单的事情:从foos中删除记录,其中start_date为< X,并且在moos中未引用。我希望这是没有太具体的问题,但我不能得到它的工作(它挂起,直到永远)我想什么,我认为将是“正常”的方式:
delete foos FROM foos LEFT JOIN moos ON foos.id = moos.foo_id WHERE moos.foo_id is null AND foos.start_date < "2013-05-30";
delete foos FROM foos WHERE start_date < "2013-05-30" AND id NOT IN (select foo_id from moos where foo_id is not null);
我要补充:
我总是选择X,让我知道与起始日期< X穆斯的数量并不大(<> 200/300K记录)
只有几千莫斯引用富
我在MySQL 5.5,所以我不能解释一下“删除”,但是当我通过更换“选择1”的解释表明,MySQL是做什么我以为它会:
- 首次使用起始日期指数找到合适的Foo
- 再看看穆斯 所以它不应该是这样的“长”的交易...
有没有更好的方式来做到这一点,还是我失去了一些东西?
感谢,
PJ
moos.foo_id为空?为什么加入空字段 –
我不确定我遵循 - 这是一个左连接,所以它不应该是一个问题,应该吗? – PJC
start_date上有索引吗? – neutrino