【发布时间】:2013-11-16 15:59:16
【问题描述】:
我正在从一个表插入查询到另一个表。 查询如下:
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
【问题讨论】:
-
您在
analytics_user表中的user_id列上有索引吗? Edit您的问题并发布SHOW INDEX FROM analytics_user的结果。 -
看这个问题,“有没有更好的方法可以做到这一点?”,不做呢?为什么不简单地使用用户表中的数据?
-
@DanBracuk 区别就像表名一个是用于分析的,它添加了更多的列来获取用户的报告,所以analytics_user表对我来说是必要的。
-
那么你想要的只是user_id。您可以通过连接这两个表来获取姓名和电子邮件地址等信息。
-
那么执行计划是怎么说的呢?