如果记录不存在需要很长时间,请从另一个表中插入

时间:2013-11-05 17:09:55

标签: mysql sql select insert

我正在从一个表到另一个表执行插入查询。 查询如下所示:

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   

2 个答案:

答案 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);

正如所指出的那样,您没有指定数据库引擎。这很重要。有些数据库支持密钥,除了这里使用的密钥。其他人支持关键字减号。可能还有其他人都不支持。