【背景】mysql数据表,主键为字符串,100万条记录,jdbc连接优化参数:cachePrepStmts=true&useServerPrepStmts=true&rewriteBatchedStatements=true,硬件配置上佳(I7处理器,16G内存)
【需求】更新所有记录的非索引字段——int类型
【问题】在实际项目中批量更新的batch大小设置为2000,每次批量更新的耗时为1分53秒左右,请问是否正常?若不正常,可能是什么原因导致或者如何优化?
下边是简要的表结构。在做完某些运算后对doc_freq进行赋值
create table lemma (
id varchar(32) character set latin1 collate latin1_bin,
... ...
doc_freq integer not null,
primary key (id)
) character set utf8mb4 collate utf8mb4_bin;
为了测试方便,我将数据集大小从100万缩减为2000,结果如下:
有一条记录的id为'1001_',
select * from lemma where id='1001_'; 耗时小于0.001s
update lemma set doc_freq=18 where id='1001_'; 耗时:0.042s
问题一:更新时间比查询时间多很多
问题二:一次性更新2000条时间约等于单条更新时间之和,有没有针对mysql的优化方法?
如何提高mysql批量更新全表非索引字段的效率?
答案:2 悬赏:30
解决时间 2021-04-09 19:43
- 提问者网友:我喜歡係
- 2021-04-08 23:04
最佳答案
- 二级知识专家网友:眠于流年
- 2021-04-08 23:37
不正常 希望有实际的表结构观看
全部回答
- 1楼网友:請叫我丶偏執狂
- 2021-04-09 00:28
你好!
是有点多时间了,检查下更新时索引是否有被调用或者有中途表被锁的情况。
看楼下有好的解决办法没有
我的回答你还满意吗~~
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯