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