gpt4 book ai didi

MySQL csv 导入增量减慢(替代方案?)

转载 作者:行者123 更新时间:2023-11-29 14:49:19 27 4
gpt4 key购买 nike

我有下表:

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 文件(我每天都会导入该文件),其中包含不到 30,000 条记录。

我已经尝试过:

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 秒的时间来直接导入到表中。

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

那么有没有办法加快这个过程(也许在导入之前关闭 key 检查?(如何?))

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

最佳答案

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

MySQL 服务器变量:

innodb_buffer_pool_size = 8MB(更改为2GB)innodb_log_file_size = 5MB(更改为256MB)innodb_log_buffer_size = 1MB(更改为4MB)innodb_flush_log_at_trx_commit = 1(改为2)

这些新设置基于以下位置的一篇文章: http://www.mysqlperformanceblog.com/2007/11/01/innodb-performance-optimization-basics/

现在,当我运行导入时,导入速度每天都不会降低。我已经导入了30天,每次导入的速度都和上次一样。所以这实际上是一个服务器优化问题。

关于MySQL csv 导入增量减慢(替代方案?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6144247/

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