MYSQL медленный большой объем вставки данных - PullRequest
0 голосов
/ 22 октября 2019

Я сделал процесс для вставки информации в базу данных 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 столбцов)

Я хотел бы послушать лучшие способы сделать это, или если я делаю что-то не так, потому что требуется много времени, чтобы вставить информацию в основную таблицу без повторяющихся значений.

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

Спасибо.

...