ВСТАВКА строк, которых нет в таблице - PullRequest
0 голосов
/ 01 сентября 2011

Я использую этот запрос, но он действительно очень медленный

   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)

Что делает, так это находит все записи, где b отсутствует в таблице "a" из таблицы z, и импортирует их в таблицу a.

Это действительно очень медленно и держит время.Есть ли где-нибудь, чтобы сделать это быстрее?

Спасибо большое BigThings

Ps

Ответы [ 4 ]

1 голос
/ 01 сентября 2011

Сделайте столбец b уникальным, затем INSERT с параметром IGNORE, поэтому:

   INSERT IGNORE INTO a (b,c,d,e,f,g,h,i)
     SELECT b,c,d,e,f,g,h,i FROM z
0 голосов
/ 01 сентября 2011

Используйте этот простой трюк:

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 нет подходящей строки, и запрос сможет эффективно использовать индексы.

0 голосов
/ 01 сентября 2011
   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)
0 голосов
/ 01 сентября 2011
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...