我尝试运行此查询:
update table1 A
set number = (select count(distinct(id)) from table2 B where B.col1 = A.col1 or B.col2 = A.col2);
但它需要永远bc table1有1,100,000行,table2有350,000,000行。
有没有更快的方法在R中执行此查询?还是在python中?
答案 0 :(得分:1)
我用三个子查询而不是一个子查询重写了您的查询 - 使用UNION
和两个INNER JOIN
语句:
UPDATE table1 as A
SET number = (SELECT COUNT(DISTINCT(id))
FROM
(SELECT A.id as id
FROM table1 as A
INNER JOIN table2 as B
ON A.col1 = B.col1) -- condition for col1
UNION DISTINCT
(SELECT A.id as id
FROM table1 as A
INNER JOIN table2 as B
ON A.col2 = B.col2) -- condition for col2
)
我的笔记:
table1
中的所有行似乎不太好,因为我们必须触及1.1M行。可能另一种用于存储number
的数据结构将具有更好的性能table1
(仅括号中的部分查询EXPLAIN
:https://dev.mysql.com/doc/refman/5.7/en/using-explain.html