我正在尝试使用连接更新基于另一个表的字段的字段:
UPDATE transactions
JOIN products ON products.link = transactions.product_id
SET transactions.user_id = products.user_id
WHERE transactions.user_id != products.user_id
然而,这需要很长时间(超过15分钟)。产品有10K行,事务有大约90K行。无论如何我可以优化我的查询吗?
交易表:
id int(11)
transaction_id varchar(255)
user_id int(11)
product_id varchar(50)
产品表:
id int(11)
user_id int(11)
link varchar(45)
答案 0 :(得分:1)
我在这里看到两个问题
让您的查询更快:
答案 1 :(得分:1)
我不确定这个sql是否可以提供帮助。你能试试吗?
update transactions as T1
inner join ( select T2.id , P.user_id
from transactions as T2, projects as P
where T2.product_id = P.link
and T2.user_id != P.user_id
) as T3 on T1.id = T3.id
set T1.user_id = t3.user_id
答案 2 :(得分:0)
请尝试这个,而不是NOT EQUAL,你可以用LEFT OUTER JOIN做一个技巧
UPDATE transactions
LEFT OUTER JOIN products ON products.link = transactions.product_id AND
transactions.user_id = products.user_id
SET transactions.user_id = products.user_id
WHERE products.user_id IS NULL AND transactions.product_id IS NULL
答案 3 :(得分:0)
创建两个索引,一个在products.link上,另一个在transactions.product_id上。
并考虑在每个索引中添加user_id作为包含字段(如果mysql支持;我主要进行SQL Server编程)。