插入不在表中的行

时间:2011-08-31 22:10:09

标签: mysql performance

我正在使用此查询,但它真的很慢

   INSERT INTO a (b,c,d,e,f,g,h,i) SELECT b,c,d,e,f,g,h,i FROM z WHERE b NOT IN (SELECT b FROM a)

做什么是从表z中找到b不在表“a”中并将其导入表a的所有记录。

它真的很慢并且保持计时。有没有让它更快?

感谢您 BigThings

P.S。

4 个答案:

答案 0 :(得分:1)

使b列唯一,然后使用IGNORE选项INSERT,以便:

   INSERT IGNORE INTO a (b,c,d,e,f,g,h,i)
     SELECT b,c,d,e,f,g,h,i FROM z

答案 1 :(得分:0)

INSERT INTO a (b,c,d,e,f,g,h,i) SELECT a.b,a.c,a.d,a.e,a.f,a.g,a.h,a.i FROM z,a WHERE z.b != a.b

答案 2 :(得分:0)

   INSERT INTO a (b,c,d,e,f,g,h,i) SELECT b,c,d,e,f,g,h,i FROM z WHERE NOT EXISTS (SELECT 1 FROM a WHERE z.b = a.b)

答案 3 :(得分:0)

使用这个简单的技巧:

INSERT INTO a (b,c,d,e,f,g,h,i) 
SELECT b,c,d,e,f,g,h,i 
FROM z
LEFT JOIN a on a.b = z.b
WHERE a.b IS NULL;

b中没有匹配的行时,您只会获得一行,并且查询将能够有效地使用索引。