繁体   English   中英

在MySQL中使用IN子句更新时如何避免全表扫描

[英]How to avoid full table scan when update with IN clause in MySQL

我有2个MySQL表:termlist和blacklist。 他们都在“ term”字段上有索引,黑名单在“ status”字段上有另一个索引。

我想将术语列表中的术语状态更新为“ B”,该术语也出现在黑名单中,其状态为“ A”,我将发出以下SQL语句:

update termlist set status = 'B' where term in (select term from blacklist where status = 'A')

这会导致对术语表进行全表扫描。 我想使用“使用内部联接更新”,但由于select语句中存在where子句,因此无法使用。

我知道我可以从该select语句创建一个临时表,然后使用该临时表更新内部联接,但是如果我想多次执行此更新,这有点繁琐。

有没有一条完整的更新语句可以完成全表扫描工作?

您可以使用:

update termlist t inner join blacklist b 
    on t.term=b.term
    set t.status = 'B' 
    where b.status = 'A'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM