В новой компании (схема может измениться), у меня есть таблица, которая будет иногда получать объемную вставку (строки 10k - 200k, которые МОГУТ содержать дубликаты) из проанализированного файла csv. Какой был бы лучший подход для этого?C Sharp MysqlBulkInsert vs Muplitple Вставить запрос
В настоящее время я делаю следующее: Insert Into table (Fields) Values (Values) ON DUPLICATE KEY UPDATE Set <Primary Key> = <Primary Key>
, который занимает слишком много времени, особенно по мере увеличения количества вставленных записей.
Два варианта я в курсе являются
1) INSERT INTO table (Fields) VALUES (Values),(Values),(Values)....
концернов:
- Paramaterizaion, мне придется объявить тысячи параметров команды, чтобы избежать SQL Injection?
- Дубликаты ключей, есть способ, чтобы избежать команды неисправного, когда дубликат первичного ключа добавляется в смесь
2) Используйте MySqlBulkLoader
проблемы: Mapping
- Колонка: Из того, что я прочитал, csv необходимо сгенерировать с полями в том же порядке, что и в таблице (при условии, что простой
DESCRIBE tablename
даст мне правильный порядок). Поскольку компания является новой, и структура таблиц HAS уже изменилась. Я не хочу забывать обновлять код и скомпрометировать целостность данных.
Любая помощь с благодарностью.
Спасибо, я прочитаю на LOAD DATA INFILE с REPLACE. Я не возражаю против изменения кода, о чем я беспокоюсь, - если добавить или заменить столбец, что bulkload все равно выполнит запрос в другом столбце. – Vee
Исправить. Как я уже сказал, вы можете иметь список столбцов в порядке в файле конфигурации. Поэтому, когда запрос будет выполнен, он будет принимать правильное количество столбцов и порядок. – Typist