0

这个问题已经被问过很多次了,但是我所做的更新非常简单,我想知道我是否可以提高性能。

我有一张表,目前存储了大约 3600 万条记录,总共 1.76 亿条记录。这是定义:

CREATE  TABLE IF NOT EXISTS `mydb`.`africaPop` (
  `geokey` VARCHAR(14) NOT NULL ,
  `xpos` DECIMAL(7) NULL ,
  `ypos` DECIMAL(7) NULL ,
  `cellvalue` DECIMAL(14,5) NULL DEFAULT -9999 ,
  `classCode` INT(11)  NULL DEFAULT -9999 ,
  `classColour` VARCHAR(9) NULL DEFAULT NULL ,
  PRIMARY KEY (`geokey`) ,
  INDEX `IDXVALUE` (`cellvalue` ASC) );

该表有两个索引。主键和 idxvalue。

我所做的更新非常简单:

  1. 使用 classCode = -9999 更新所有记录;

    update africaPop set classCode = -9999;
    
  2. 更新 classCode = 10 其中 cellvalue BETWEEN 0 AND 25

    update africaPop set classCode = 10 where cellvalue BETWEEN 0 AND 25;
    

更新在具有 8 个独立内核的 48GB RAM Linux 数据库服务器中完成。服务器是新的,只有一个用户,因此它只处理该更新。

第一次更新需要 2 分 17 秒。第二个需要 2 分 28 秒。

这可能听起来很傻,但 2 分钟对于我们的要求来说太长了。我设法通过使用LOAD LOCAL IN FILEkey_buffer_size 并将其增加到 RAM 的 25% 来显着减少插入时间。

如何减少更新时间?

4

0 回答 0