我正在从一个表到另一个表执行插入查询。 查询如下所示:
INSERT INTO analytics_user (brokerage_id, email, first_name, last_name, landing_page_source, sign_up_time, user_id)
SELECT brokerage_id, email, first_name, last_name, landing_page_source, sign_up_time, user_id
FROM user
WHERE user_id NOT IN
(SELECT user_id FROM analytics_user);
我喜欢用户表中的1M记录,有没有更好的方法呢?因为它需要很长时间才能完成,比如超过20分钟,或者它只是冻结而且我必须重新启动服务器。
更新
显示来自analytics_user的索引
analytics_user 0 PRIMARY 1 id A 10687 NULL NULL BTREE
analytics_user 0 brokerage_id 1 brokerage_id A 10687 NULL NULL BTREE
analytics_user 0 user_id 1 user_id A 10687 NULL NULL BTREE
答案 0 :(得分:0)
尝试这样可能有助于你
INSERT INTO analytics_user
(brokerage_id, email, first_name, last_name, landing_page_source, sign_up_time, user_id)
(
SELECT
brokerage_id, email, first_name, last_name, landing_page_source, sign_up_time,
user_id
FROM user A
Left join analytics_user b on A.User_Id=B.User_Id
where B.User_Id is null)
答案 1 :(得分:0)
您的查询因此而缓慢:
WHERE user_id NOT IN
(SELECT user_id FROM analytics_user);
这种结构虽然非常直观,但总是很慢。这样的事情更好:
WHERE user_id IN
(SELECT user_id FROM
user
except
SELECT user_id FROM analytics_user);
正如所指出的那样,您没有指定数据库引擎。这很重要。有些数据库支持密钥,除了这里使用的密钥。其他人支持关键字减号。可能还有其他人都不支持。