我有一些大表,我想用以下命令删除一行
当我尝试这个时,它花了太长时间:
DELETE global, lines
FROM lines force index(cardIndex)
INNER JOIN global force index(cardIndexes)
ON global.card = lines.card
WHERE lines.product NOT IN (SELECT code FROM article);
我的表全局有900.000行,行表有6.000.000行,文章有40.000 有什么想法可以改善命令吗?
答案 0 :(得分:1)
NOT IN
是一项非常昂贵的操作。您可以使用以下替代方法消除它:
OUTER JOIN
改为article
表,而article.code
为空的行。 null意味着article
表中没有相应的记录 - 换句话说:“不在”。
DELETE global, lines
FROM lines force index(cardIndex)
INNER JOIN global force index(cardIndexes) ON global.card = lines.card
LEFT JOIN article ON lines.product = article.code
WHERE article.code IS NULL;