【问题标题】: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_iduser_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 查询之前。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-05
      • 1970-01-01
      • 2022-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多