gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 06:23:25 25 4
gpt4 key购买 nike

我有 2 个 MySQL 表:termlist 和 blacklist。他们都有字段“术语”的索引,而黑名单在字段“状态”上有另一个索引。

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

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

它会导致对 termlist 进行全表扫描。我想使用“使用内部连接更新”,但我不能,因为 select 语句中有一个 where 子句。

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

是否有一种更新语句可以在不进行全表扫描的情况下完成这项工作?

最佳答案

您可以使用:

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

关于mysql - 在MySQL中使用IN子句更新时如何避免全表扫描,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32315480/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com