INSERT IGNORE или INSERT WHERE NOT IN

У меня таблица из 9 миллионов строк, и я изо всех сил стараюсь обрабатывать все эти данные из-за ее огромного размера.

Я хочу добавить IMPORT CSV в таблицу без перезаписи данных.

Прежде чем я сделал бы что-то подобное; INSERT if not in (выберите email из tblName, где source = "number" и email! = "Email") INTO (email …) VALUES ("email" …)

Но я беспокоюсь, что я снова разрушу сервер. Я хочу иметь возможность вставлять 10000 строк в таблицу, но только если ее нет в таблице с источником = «число».

В противном случае я бы использовал уникальный столбец электронной почты.

Короче говоря, я хочу ВСТАВИТЬ как можно быстрее, не вводя дубликаты в таблицу, проверяя две вещи. Если электронная почта! = «Email» И источник! = «Число», то вставляйте в таблицу, иначе ничего не делайте. И я также не хочу сообщать об ошибках.

Я сожалею о своей плохой формулировке, и вопрос звучит немного глупо.

Мне просто нелегко было проверить, не загружены ли данные, загрузив резервные копии и загрузку, если это пойдет не так. Я ненавижу большие наборы данных 🙂

Благодарю всех вас за ваше время -BigThings

Установите ограничение UNIQUE столбцов email и source .

Затем выполните:

 INSERT INTO table_name(email, source, ...) VALUES ('email', 'source', ...) ON DUPLICATE KEY UPDATE email = email; 

INSERT IGNORE не будет уведомлять вас о каких-либо ошибках. Я бы не рекомендовал его. Я тоже не рекомендую INSERT ... WHERE NOT IN . Для этого MySQL имеет уже хорошо оптимизированную функциональность. Вот почему INSERT ... ON DUPLICATE KEY UPDATE есть.

Если у вас есть уникальные ключи в этих полях, вы можете использовать LOAD DATA INFILE с опцией IGNORE. Это быстрее, чем вставка строки за строкой, и быстрее, чем многозадачность.

Посмотрите http://dev.mysql.com/doc/refman/5.1/en/load-data.html