MySQL csv导入增量放缓(备选方案?)



我有下表:

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

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

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

edit:还要注意的是,也不需要外键检查,因为Category和Product表已经更新,并且外键约束不是导入的问题。

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

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天,每次导入的速度与上次相同。所以这实际上是一个服务器优化问题。

相关内容

  • 没有找到相关文章

最新更新