繁体   English   中英

优化 MYSQL 中的 UPDATE JOIN 查询

[英]Optimize UPDATE JOIN query in MYSQL

我正在运行以下 SQL 查询:

UPDATE A 
  join B 
    on A.b_id  = B.id 
   SET B.col1 = 'val1'
     , B.col2 = ''
     , B.col3 = 1
 where a.col4 = 'val4' 
   and b.col5 = 1234 
   and b.col6 = 1 
   and b.col7 = 'val7';

在表 B 中,id 是 B 的 PRIMARY KEY,在表 A 中。b_id 只是 A 中的一列,应该与表 B 的 id 具有相同的值。

我的问题是,有没有办法在有/没有(首选)更改表定义的情况下优化上述查询? 谢谢。

    on A.b_id  = B.id 
   SET B ...
   WHERE
   and b.col5 = 1234 
   and b.col6 = 1 
   and b.col7 = 'val7';

我不知道它是以A还是B开头。 所以,让我推荐每个索引:

B:  INDEX(col5, col6, col7, id)
A:  INDEX(b_id)
A:  INDEX(col4, b_id)

这些也将有助于 Ronnie 的子查询方法。

如果您有足够新的版本,请在添加这些索引之前和之后提供EXPLAIN UPDATE... (旧版本的 MySQL 没有这个命令。)

您使用SUBQUERY执行 JOIN 以减少 JOIN 所涉及的行数。

由于您只更新表B的列,因此您只将 B 放在UPDATE子句中。 建议使用INNER JOIN来防止一些不需要的更新。

增强效果如下图:-

 UPDATE B SET B.col1 = 'val1', B.col2 = '', B.col3 = 1 
     FROM (SELECT b_id FROM A WHERE a.col4='val4') as tableA
     INNER JOIN B ON tableA.b_id  = B.id 
     WHERE b.col5=1234 AND b.col6=1 AND b.col7='val7';

暂无
暂无

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

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