在mysql数据库中加载数据时遇到问题。我使用此方法在数据库中插入数据:
USE database;
ALTER TABLE country
ADD UNIQUE INDEX idx_name (`insee_code`,`post_code`,`city`);
LOAD DATA INFILE 'C:/wamp64/tmp/myfile-csv'
REPLACE
INTO TABLE `country` CHARACTER SET utf8
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES;
我的table很简单:
CREATE TABLE `country` (`insee_code` VARCHAR(250),
`post_code` VARCHAR(250),
`city` VARCHAR(250));
在我使用php脚本加载其他表之前,它的速度非常快(3分钟内加载3gb),但是对于这个,加载1gb需要17分钟。
我不知道为什么,因为使用索引时,有些行丢失或损坏,我只是想知道为什么。如果有人在从csv加载数据时有其他方法来删除重复的行,我会非常感激。
提前谢谢。
1条答案
按热度按时间ktca8awb1#
用一个
REPLACE
基本上是先删除行,然后插入新行。你想做的是IGNORE
相反。阅读更多信息:13.2.7加载数据填充语法
replace和ignore关键字控制对在唯一键值上复制现有行的输入行的处理:
如果指定“替换”,则输入行将替换现有行。换句话说,主键或唯一索引的值与现有行相同的行。参见第13.2.9节“替换语法”。
如果指定ignore,将丢弃与唯一键值上的现有行重复的行。有关更多信息,请参阅ignore关键字和strict sql模式的比较。
如果您添加一个主键,也会更好。如果没有,mysql会隐式地为您创建一个。这个是不可见的,是uuid或bigint。我记不清楚了。无论如何,这并不是最佳的性能和存储方式。执行以下操作: