我有一个名为product的表。在此表中,我想更新一些产品ID值,但我无法直接更新,我的'其中'条件需要根据另一个表中的值来确定记录,所以我这样做:
update product set prod_active = 0 where prod_id in (
select prod_id from user_prod_sel where seltype = 100
)
我在这里遇到的问题是这很慢。如何将其转换为基于oin的查询,可以为我提供更快的结果?
非常感谢任何帮助。
答案 0 :(得分:0)
你应该可以这样做:
UPDATE product a
JOIN user_prod_sel b ON a.prod_id = b.prod_id AND b.selType = 100
SET a.prod_active = 0
答案 1 :(得分: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
查询之前执行。