MYSQL缓慢地插入大量数据

MYSQL缓慢地插入大量数据,mysql,sql,stored-procedures,local,Mysql,Sql,Stored Procedures,Local,我已经做了一个在MYSQL服务器的数据库中插入信息的过程,我需要从一个XML文件中插入信息,这些XML文件有很多信息,它们的大小是(500mb)。因此,我只提取我想要的信息,并将其保存在一个由管道分隔的文本文件中 我这样做是为了更快地处理信息,使用MYSQL服务器的LOCAL DATA Infle语句将信息插入到主表的一个精确副本中(大约52列),我制作了一个精确副本以插入信息,然后执行一个存储过程,将复制表的信息插入到原始数据中,并设置一些条件以避免数据重复 因此,我在存储过程中有如下INSE

我已经做了一个在MYSQL服务器的数据库中插入信息的过程,我需要从一个XML文件中插入信息,这些XML文件有很多信息,它们的大小是(500mb)。因此,我只提取我想要的信息,并将其保存在一个由管道分隔的文本文件中

我这样做是为了更快地处理信息,使用MYSQL服务器的LOCAL DATA Infle语句将信息插入到主表的一个精确副本中(大约52列),我制作了一个精确副本以插入信息,然后执行一个存储过程,将复制表的信息插入到原始数据中,并设置一些条件以避免数据重复

因此,我在存储过程中有如下INSERT语句:

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...

注意:我在NOT EXISTS子句之间进行了合并,因为我希望避免重复null值,如果使用null=null,MySQL将不起作用

不管怎样,让我们设想一下,TableTemp有200000行,而主表(table)有大约900万行

因此,当我执行存储过程将信息插入主表时,执行此操作需要花费大量时间(有时需要长达三个小时)

主表有一些索引列(在5列中我有索引,在5列中的多个列中也有一个唯一的键)

我想听听更好的方法,或者如果我做错了什么,因为在主表中插入信息而没有重复的值需要很多时间

我希望你们中的一些人能帮助我


谢谢你。

“如果我使用NULL=NULL,MySQL就不能工作”-请参阅:。是的,我已经检查过了,这就是为什么我使用coalesce来比较NULL(如果列为空,则将值设置为0),因此我假装避免列中的NULL值。但主要的一点是它减少了insert语句的时间。“是的,我已经检查过了”-我对此表示怀疑。请再读一遍这些文件。