mysql - INSERT FROM other table 如果记录不存在需要很长时间

标签 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   

最佳答案

尝试这样可能会对你有帮助

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)

关于mysql - INSERT FROM other table 如果记录不存在需要很长时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19794735/

相关文章:

php - 从 MySQL 数据库为 Doctrine 生成 YAML 模式或模型

php - 没有模型 [App\Products] Laravel 的查询结果

SQL 检查列中的所有值

sql - PostgreSQL - 使用模式匹配连接表

MySQL从一张表中选择具有不同条件的字段

mysql - 从另一个表计数的 SQL

PHP mySQLi real_escape_string 不适用于撇号

mysql - mysql中触发错误

SQL Server 2012 : Calculating total time elapsed for every unique record from a logs table

sql - 将选择结果作为存储过程的参数传递