使用具有3600万条记录的MyISAM表提高MySQL基本更新性能

时间:2012-04-10 11:16:37

标签: mysql performance dataset

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

我有一张桌子,目前存储了大约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和25

    update africaPop set classCode = 10 where cellvalue BETWEEN 0 AND 25;
    
  3. 更新是在具有8个独立内核的48GB RAM Linux数据库服务器中完成的。服务器是新的,只有一个用户,因此它只是更新的处理。

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

    听起来可能很傻但是2分钟对我们的要求来说太长了。 我设法使用LOAD LOCAL IN FILE大大减少了插入时间,并将key_buffer_size增加到RAM的25%。

    如何缩短更新时间?

0 个答案:

没有答案