这个问题已经被问过很多次了,但是我所做的更新非常简单,我想知道我是否可以提高性能。
我有一张表,目前存储了大约 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。
我所做的更新非常简单:
使用 classCode = -9999 更新所有记录;
update africaPop set classCode = -9999;
更新 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 FILE
key_buffer_size 并将其增加到 RAM 的 25% 来显着减少插入时间。
如何减少更新时间?