У меня таблица из 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