sql:根据另一个,从表中删除行需要太长时间

时间:2016-02-29 13:45:44

标签: mysql sql-delete

我有一些大表,我想用以下命令删除一行

当我尝试这个时,它花了太长时间:

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 有什么想法可以改善命令吗?

1 个答案:

答案 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;