优化MYSQL中的UPDATE JOIN查询。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了优化MYSQL中的UPDATE JOIN查询。相关的知识,希望对你有一定的参考价值。
我正在运行下面的SQL查询,在表B中,id是B的PRIMARY KEY,在表A中,b_id只是A中的一列,应该与表B的id值相同。
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的主键,在表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没有这个命令)。
另一答案
你使用 次级查询 来执行JOIN,以减少参与JOIN的行数。
由于您只更新表 B'的列,所以你只把B放在 更新 子句。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';
以上是关于优化MYSQL中的UPDATE JOIN查询。的主要内容,如果未能解决你的问题,请参考以下文章
mysql使用join做update操纵与使用join做查询时出现重复记录的问题
MySQL - 优化查询(LIMIT、OFFSET、JOIN)> 2500 万行