gpt4 book ai didi

mysql - 删除重复行时超慢加载数据 infile

转载 作者:行者123 更新时间:2023-11-29 07:29:20 26 4
gpt4 key购买 nike

我在 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),但是对于这个,需要 17 分钟才能完成加载 1 GB。

我不知道为什么,因为有了索引,一些行会丢失或损坏,我只是想知道为什么。如果有人有其他方法可以在从 CSV 加载数据时删除重复行,我将不胜感激。

提前致谢。

最佳答案

使用 REPLACE 基本上是先删除行,然后插入新行。您要做的是 IGNORE

The REPLACE and IGNORE keywords control handling of input rows that duplicate existing rows on unique key values:

  • If you specify REPLACE, input rows replace existing rows. In other words, rows that have the same value for a primary key or unique index as an existing row. See Section 13.2.9, “REPLACE Syntax”.

  • If you specify IGNORE, rows that duplicate an existing row on a unique key value are discarded. For more information, see Comparison of the IGNORE Keyword and Strict SQL Mode.

另外,如果能加个主键就更好了。如果你不这样做,MySQL 会隐式地为你创建一个。这个是不可见的,要么是 uuid 要么是 bigint。我记不太清楚了。无论如何,这不是最佳的性能和存储方式。执行这个:

ALTER TABLE country ADD column id int unsigned auto_increment primary key;

关于mysql - 删除重复行时超慢加载数据 infile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52276769/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com