这个问题已被多次询问,但我所做的更新非常简单,我想知道我是否可以提高性能。
我有一张桌子,目前存储了大约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和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%。
如何缩短更新时间?