Я сделал процесс для вставки информации в базу данных MYSQL Server, мне нужно вставить информацию из XML-файлов, эти XML-файлы содержат много информации, их размер (приблизительно 500 МБ). Поэтому я извлекаю только ту информацию, которая мне нужна, и сохраняю ее в текстовом файле, разделенном каналами.
Я сделал так, чтобы обрабатывать информацию быстрее с помощью оператора LOCAL DATA INFILE сервера MYSQL для вставки информациив точной копии основной таблицы с (приблизительно 52 столбца) я сделал ее точную копию, чтобы вставить информацию, и после этого выполнить хранимую процедуру, чтобы вставить информацию из таблицы копирования в оригинал и поставить некоторые условия дляизбегайте дублирования данных.
Таким образом, в хранимой процедуре есть INSERT STATEMENT:
INSERT INTO Table
(
Col1,
Col2,
Col3,
COl4,
Etc..
)
SELECT
DISTINCT
Col1,
Col2,
COl3,
Col4,
Etc..
FROM TableTemp tmp WHERE tmp.File = 1 tmp.Action = 'A'
AND NOT EXISTS (
SELECT * FROM Table PC
WHERE PC.Col1 = tmp.Col1
AND COALESCE(PC.Col2,0) = COALESCE(tmp.Col2,0)
AND COALESCE(PC.Col3,0) = COALESCE(tmp.Col3,0)
AND COALESCE(PC.Col4,0) = COALESCE(tmp.Col4,0)
AND ETC...
Примечание: у меня есть COALESCE между предложением NOT EXISTS, потому что я хочу избежатьнулевые значения дублируются, и MySQL не работает, если я использую NULL = NULL.
В любом случае, TableTemp имеет 200 тыс. строк, а основная таблица (Table) - приблизительно 9 млн. строк.
Поэтому, когда я выполняю хранимую процедуру для вставки информации в основную таблицу, это заняло много времени. время, чтобы выполнить эту операцию, (бывают случаи, когда это занимает до трех часов).
В главной таблице есть некоторый столбец индекса (в 5 столбцах у меня есть индекс, а также уникальный ключ в столбцах с кратными числами, в5 столбцов)
Я хотел бы послушать лучшие способы сделать это, или если я делаю что-то не так, потому что требуется много времени, чтобы вставить информацию в основную таблицу без повторяющихся значений.
Я надеюсь, что некоторые из вас могут мне помочь,
Спасибо.