[英]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.