【问题标题】:Update table value for records based on join基于连接更新记录的表值
【发布时间】:2016-06-21 22:45:18
【问题描述】:
我有一个名为 product 的表。在这个表中,我想更新一些产品 id 值,但是我不能直接这样做,我的“where”条件需要根据另一个表中的值来确定记录,所以我这样做:
update product set prod_active = 0 where prod_id in (
select prod_id from user_prod_sel where seltype = 100
)
我在这里遇到的问题是这非常慢。如何将其转换为基于 oin 的查询,以提供更快的结果?
非常感谢任何帮助。
【问题讨论】:
标签:
mysql
join
sql-update
【解决方案1】:
你应该可以这样做:
UPDATE product a
JOIN user_prod_sel b ON a.prod_id = b.prod_id AND b.selType = 100
SET a.prod_active = 0
【解决方案2】:
如果您想加快查询速度,您需要为product.prod_id 和user_prod_sel.seltype 添加索引。表索引的存在正是为了加快数据的选择。
ALTER TABLE `product` ADD INDEX `prod_id` (`prod_id`)
如果索引product.prod_id已经有索引(例如,如果它是主键),则不要添加索引。
ALTER TABLE `user_prod_sel` ADD INDEX `seltype` (`seltype`)
然后:
UPDATE `product`, `user_prod_sel`
SET `product`.`prod_active` = 0
WHERE
`product`.`prod_id` = `user_prod_sel`.`prod_id` AND
`user_prod_sel`.`seltype` = 100
当然,创建索引是一项只执行一次的任务,而不是在每个UPDATE 查询之前。