基于连接的记录的更新表值
问题描述:
我有一个名为product的表。在该表中,我想更新的一些产品ID值,但我不能这样做直接,我的“其中”条件需要根据从另一个表值来决定的记录,所以我做的:基于连接的记录的更新表值
update product set prod_active = 0 where prod_id in (
select prod_id from user_prod_sel where seltype = 100
)
这个问题我这里有这是非常缓慢的。我怎样才能把它转换成基于oin的查询,可以给我更快的结果?
任何帮助,非常感谢。
答
你应该能够做到这一点:
UPDATE product a
JOIN user_prod_sel b ON a.prod_id = b.prod_id AND b.selType = 100
SET a.prod_active = 0
答
如果你想加快你需要添加索引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
查询之前的任务。
可能的重复:http://*.com/questions/15209414/how-to-use-join-in-update-query – JanR