通过禁用/启用约束和索引在mysql中导入大型CSV文件

时间:2011-12-13 08:15:32

标签: mysql sql database

我想在数据库表中导入大型CSV文件。我使用“Mysql”作为数据库。我的表有“Innodb”引擎,我正在导入CSV使用以下命令文件: “LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE ......”。 我的大四学生建议我按照以下顺序使用此命令以更快的方式导入CSV文件:

1)禁用或删除索引。

2)禁用或删除约束。

3)火灾负荷数据命令

4)启用或重新创建约束

5)启用或重新创建索引。

我有一个主键,自动增量,两个外键和两列唯一索引。

当我刚接触数据库时,我在互联网上搜索了如何启用/禁用约束?从那以后我就能理解

1)主键内部有一个唯一索引,但没有空约束

2)外键在内部有一个索引,没有空约束。

3)同样通过使用“SET foreign_key_checks = 0”命令我们可以禁用外键,但是它会禁用数据库的所有外键检查而不是单个表所以我想要它适用于单桌。

4)我可以使用“ALTER TABLE table_name DISABLE ALL KEYS”命令禁用唯一索引。

所以我有疑问:

1)我能否禁用特定表的外键约束,禁用后它也会在内部禁用索引,或者我必须删除它。

2)我是否可以通过自动增量禁用主键,禁用后它也会在内部禁用唯一索引或我必须删除它但我想要第一列自动增加,即主键为CSV文件don' t具有第一列值。

任何人都可以帮我解决这个问题,谢谢。

1 个答案:

答案 0 :(得分:1)

在从CSV文件导入更多数据之前禁用表中的键约束可能会加快导入速度,但如果您不是100%确定新导入的CSV数据不违反键约束,那么您可能是导入后无法重新创建已删除的KEY。

  1. 如果导入数据的第一列的值为NULL,则导入它将导致Mysql创建新的唯一PRIMARY KEY的序列号。如果删除AUTO_INCREMENTING PRIMARY KEY,将禁用此不错的功能,并且您的数据将没有主键。围绕此有许多变通方法,但是大多数变通方法会比导入期间保留PRIMARY KEY消耗更多的时间和计算资源。