簡體   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