MySQL csv导入增量放缓(替代方案?)

MySQL csv导入增量放缓(替代方案?),mysql,csv,import,slowdown,Mysql,Csv,Import,Slowdown,我有下表: CREATE TABLE `Product_Category_Rank` ( `CategoryId` SMALLINT(5) UNSIGNED NOT NULL , `ProductId` VARCHAR(32) NOT NULL , `RankedOn` DATE NOT NULL , `PopularityRank` SMALLINT(5) NOT NULL , PRIMARY KEY (`CategoryId`, `ProductId`, `Ranked

我有下表:

CREATE  TABLE `Product_Category_Rank` (
  `CategoryId` SMALLINT(5) UNSIGNED NOT NULL ,
  `ProductId` VARCHAR(32) NOT NULL ,
  `RankedOn` DATE NOT NULL ,
  `PopularityRank` SMALLINT(5) NOT NULL ,
  PRIMARY KEY (`CategoryId`, `ProductId`, `RankedOn`) ,
  INDEX `fk_Product_Category_Rank_Product` (`ProductId` ASC) ,
  INDEX `fk_Product_Category_Rank_Category` (`CategoryId` ASC) ,
  CONSTRAINT `fk_Product_Category_Rank_Category`
    FOREIGN KEY (`CategoryId` )
    REFERENCES `Category` (`CategoryId` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_Product_Category_Rank_Product`
    FOREIGN KEY (`ProductId` )
    REFERENCES `Product` (`ProductId` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_general_ci
我有一个csv文件(我每天都导入),其中包含不到30000条记录

我试过:

LOAD DATA LOCAL INFILE 'temp/product_category_rank.csv'
INTO TABLE `Product_Category_Rank`
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"'
LINES TERMINATED BY '\n';
我还尝试将文件加载到临时表中,并执行以下操作:

INSERT
  INTO `Product_Category_Rank` ( ... )
SELECT ...
  FROM `tmp_product_category_rank`
两种方法的效果相同(结果相同),但我确信第二种方法的资源成本略高。我遇到的问题是,每天加载/插入选择功能的导入时间都会增加大约3秒/天。所以第30天我要花90秒的时间直接导入到表中

事实:导入永远不会有重复的主键(当然,除非我尝试两次导入相同的数据,这不是问题)

那么有没有办法加快这个过程(可能在导入之前关闭密钥检查?(如何?)

编辑:还要注意的是,不需要进行外键检查,因为类别和产品表已经更新,并且外键约束与导入无关。

解决方案:(显然与查询无关)

MySQL服务器变量:

innodb_缓冲区_池_大小=8MB(更改为2GB) innodb_日志_文件大小=5MB(更改为256MB) innodb_日志_缓冲区_大小=1MB(更改为4MB) innodb_flush_log_at_trx_commit=1(更改为2)

这些新设置基于以下位置的文章:


现在,当我运行导入时,每天导入的速度都没有下降。我已经导入了30天,每次导入的速度与上次相同。因此,这实际上是一个服务器优化问题。

我觉得我在什么地方读到过,删除索引、导入并重新添加索引比打开索引导入要快。不过,在对真实数据进行测试之前,我会做一些测试用例。@Sam Dufel我想知道的是,是否有一种方法可以在测试过程中禁用密钥和外键检查import@Sam杜菲尔:是的(我也在这里用谷歌搜索,我试着在SET foreign_key_checks=0;SET foreign_key_checks=1;之间包装负载;似乎没有任何效果(速度方面)@Sam Dufel Scratch,这可能有帮助,我将在这里进行更多的基准测试,并将很快更新)。