如何高效更新(update)MySQL百万级数据表更新某个字段 5C

一个面试题,一张表里面一个性别字段错误录入成1,有百万级别数据量,
如何更高效的update性别字段为2。
要求:只有十分钟时间给你update。

5个回答

百万级数据,10分钟更新完,有什么难点,速度根本不慢,看我的测试数据:
测试环境:自己pc机(cpu i7 3770 8G内存 机械硬盘),原生mysql(未优化) 数据量110万

-- 全部更新
[SQL]update userinfo set douban = null;
受影响的行: 1157744
时间: 202.126s

-- 全部更新
[SQL]update userinfo set douban = '11';
受影响的行: 1157744
时间: 274.740s

-- 部分更新 id为奇数
[SQL]update userinfo set douban = '22' where mod(id,2)=1;
受影响的行: 578843
时间: 75.465s

-- 部分更新 sex=1 sex字段无索引
[SQL]update userinfo set douban = '33' where sex =1;
受影响的行: 672629
时间: 72.308s

不慢吧,还是普通pc机,并不是专业的正式服务器,如果使用正式服务器,100万条数据更新预计不会超过10秒

面试官水平有限,可能他还没碰到过大数据量

YUANfang121
YUANfang121 他既然这样问,就不是在数据库的客户端操作了,很有可能是在项目中。
5 个月之前 回复
niaonao
niaonao 他的问题可能不严谨,但他想问的是如何高效更新,而不是你能不能在10分钟处理100W数据
接近 2 年之前 回复

高效地更新数据库字段有很多方式,比如说合理地设计表结构,比如读写分离和使用群集来提高性能等等。

但是就你这个问题,我不知道有没有上下文,具体要你做什么。因为错误输入是一个偶发事件,然后你现在要在规定时间内解决问题,那么应该不是问你算法、查询、表结构、架构这些。

而很可能是希望你回答回滚数据,将错误输入撤销,然后再更新表。回滚数据还有一个好处就是,它不是把现在数据库里面性别为1的字段都更改为2,这显然不对,应该是只将录入错误的修改,而不动原来就是1的数据。百万级更新,要看表的结构和规模,在性能比较好的硬件上,就很平常地update也是可以达到的。

面试题的话, 我觉得还是要看考点。启动50个线程执行update不知道可以不可以?

把数据库表其他列数据导出,导入到新表,并性别列为2。然后删除旧表,修改新表名字

这道题原文就这样?是让你知道里面一条记录某字段错误?还是整张表的性别字段都错了,全部更正?
如果有人问我这样的问题:哦,数据库里面XX字段错了,麻烦更正一下。我肯定diao他。哪一条数据谁知道?
如果这是开放提问,那好办啊,除了性别假设只有主键编号,就当是AI性别嘛,编号就纯数字从1到几百万,那我知道编号where更新就OK啦。不要说百万了,更新个100E的都行。
如果不是开放提问,你还需要知道数据构成,选择这间公司,请自重。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐