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

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

0

5个回答

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

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

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

1

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

0

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

0

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

0

百万级数据,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秒

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

0
niaonao
niaonao 他的问题可能不严谨,但他想问的是如何高效更新,而不是你能不能在10分钟处理100W数据
10 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
如何快速更新数据库中的百万条数据
环境:ubuntu 14.04,Mysql 5.6,python 2.7。 本文使用python的MySQLdb这个库,MySQL Python tutorial这个教程很赞。 MySQLDBdb处理INSERT、UPDATE、DELETE时需要显式得commit()才能使更新有效,这也意味着commit之前的更新语句是放在一个事务中的。 For databases th
百万级别数据的更新
1.存储过程批量更新 declare  v_int number;  v_loanid varchar(100);  v_tmName varchar(100);  v_tmMobile varchar(100);  v_tmPid varchar(100);  cursor yb is     select loanid,tmName,tmMobile,tmPid from bhzx_c1_t...
千万数据量的表怎么做更新
比如,我有一个t1表,想更新c1字段,就是一个update t1 set c1=1;但是t1表有1600万行。如何做才能更快?!我们知道如果直接执行上述语句的话,对于千万级数据量而言肯定是会直接卡死的,所以优先考虑采用存储过程    如下:CREATE  PROCEDURE `update_t1`()BEGIN    declare i int;         set i = 0;      w...
mysql处理百万级数据库常识(转载)
最近一段时间参与的项目要操作百万级数据量的数据,普通SQL查询效率呈直线下降,而且如果where中的查询条件较多时,其查询速度简直无法容忍。之前数据量小的时候,查询语句的好坏不会对执行时间有什么明显的影响,所以忽略了许多细节性的问题。       经测试对一个包含400多万条记录的表执行一条件查询,其查询时间竟然高达40几秒,相信这么高的查询延时,任何用户都会抓狂。因此如何提高sql...
mysql数据库update更新速度慢
更新速度超级慢:update table1 a set a.name='xx' where a.id in(select id from table2) 改成:update table1 a,table2 b set a.name='xx' where a.id=b.id 不知道原理是什么,求大神解释下...
mysql 百万级数据插入更新速度问题
大家好^^ 我现在正在作毕业设计 题目是构建一个[color=red]搜索引擎[/color] 现在已经实现了crawler,代码全是自己写的,没有参开其他的open source,所以完全没有学习人家的开源的思想,比如nutch,然后再所以没有用文件作url的库,用的是mysql 5.0的innodb表,数据库中一共有12张表,分别是vUrls(以访问的url),urls_0到url...
mysql 百万级数据库优化方案
 一、百万级数据库优化方案1.对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num is null最好不要给数据库留NULL,尽可能的使用 NOT NULL填充数据库.备注、描述、评论...
Oracle大数据量更新方法
实际工作中我们有时会遇到,需要对一些超级大(BT)的表进行数据更新(更悲剧的是有时需要关联更新,就是依据一张大表的数据来更新另一张表的数据)我们通常的更新方法可能在性能效率上遭遇瓶颈,下面就笔者遇到的一个案列进行记录分享。 首先我们来看下需求: 一张玩家首登表:account_first_login(此表中有account,login_date,login_region字段)一张玩
mysql千万级数据表结构修改
当需要对表进行ddl操作如加索引、增删列时,数据量小时直接在线修改表结构影响不大 当表达到百万、千万数据就不能直接在线修改表结构 下面是具体的过程: 1、备份数据 select * from ih_order into outfile '/bak/order.txt'; mysql> select * from ih_order into outfile 'D:/bak/order.
数据库操作之update,按照特定字段进行分组排序update更新序号
需求:根据project_id分组,project_lease_item_id排序对seq_number从1递增更新整个表中的数据 一、下图为更新之前的数据:  二、更新数据库的代码 数据库用的是oracle: 方案一: update prj_project_lease_item p1 set p1.seq_number = (select V.seq_number...
MySQL--数据表更新记录
当记录需要更改时,可以使用update语句更新记录: update tb_name set col_name1 = { expr1 | default },col_name2 = { expr2 | default }.... [ where where_condition]; 当省略后面的where条件语句时,会更新一整列的数据,比如: 我们更新表tb1的 age字段,不加wher
大数据量时更新某字段的两种方案 哪个更好?
场景描述: 现在有两个表分别为ip和data表, ip表:ipId,startIp,endIp 都是整型 数据量为千级,可以按照1000左右来算 data表:dataId,ip,status 都是整型(另外还有其他字段) 数据量为百万级 可以按照2 000 000左右来算 因为业务上的需要,现在需要更新data表的status值为0或1,规则是:如果ip在【startI...
mysql 中update 把一个数据集中的某些字段的值批量更新到另一个表中。
-- 添加开票时  把开票中的票据类型赋值到收费计划中的票据类型字段 update sfjh a inner join (select c.contract_id,c.bill_type from kp c where c.id='#{id}') b on a.contract_id = b.contract_id set a.bill_type = b.bill_type  ...
批量更新数据库表字段值四步走
声明:欢迎批评指正开始!第一步:备份数据库表数据第二步:用select查出要更新的记录,看结果是否满足要求,有没有错的或遗漏的等等第三步:用update更新一条结果中的记录,只更新一条,然后看语句对不对,结果对不对第四步:取消更新一条条件批量更新...
mysql大批量数据更新
批量更新操作常用的方式如下: 1.replace into 本质是先delete重复数据,然后再insert数据,非空字段会设置成默认值,极其危险慎用,可能清空大量数据 replace into tst (id,attr) values (1,'2'),(2,'3'),...(x,'y'); 2.insert into 只更新主键id记录的需要更新的字段,其他字段不清除。如果主键id不...
mysql搜索一个表然后更新这个表,给其中一个字段添加字符串
搜索一个表然后更新一个表 这样是不正确的 UPDATE appbricks_department SET rank = '2' WHERE parent_id in (SELECT id FROM appbricks_department WHERE parent_id IS NULL) ; 会报错 You can't specify target table 'studen...
mysql更新数据库中所有相同的某个字段的值
1. 查看所有的数据表 -- 查看所有数据表; SHOW TABLES; 2. 查看某个数据表的所有的字段-- 查看表tb_watch_back的所有字段 DESCRIBE tb_watch_back; SHOW COLUMNS FROM tb_watch_back; 3. 查询数据库中某个字段以及所在的表-- 使用 INFORMATION_SCHEMA.Columns查询所有的表以及字段 SE
update字段执行效率慢的解决办法
update字段时,执行效率慢可以换成下边这种方式: 解决办法: 用merge into tableA using (括号里面是你需要的字段,来自于其它表的数据 比如 tableB) on(tableA 跟tableB 的关联条件) when matched then update set tableA.id=tableB.id ; 这是句式,下边用案列来证明及 这个句式的具体使用...
MySQL 百万级分页优化(Mysql千万级快速分页)
MySQL 百万级分页优化(Mysql千万级快速分页),主要解决大数量级的优化
Mysql更新某一个字段的值
update tablename set age='newage' where age='';
Python 批量update MySQL数据库表某字段
import pymysql #链接数据库 conn=pymysql.connect(host='127.0.0.1', user='medatc', passwd='ahcuy4ahtee4aequai4AhyeikoomieR3', ...
MySQL Update的时候对一个字段进行递增
在我们有一个需求是更新某个表里面的某个字段,让这个字段变成一个递增的值,或者插入某个表中使得某些字段的值是递增的。下面我们来看看具体的操作 更改表字段为递增 首先设置一个变量,初始值为任意数值,这里以0为例: SET @num:= 0; 例如我们需要更新quanguoPM(排序)这个字段的值。我们可以这样处理 UPDATE tp_member_copy_copy SET quanguoP...
MySQL中更新字符串中的内容的两种方法
1、使用字符串相加函数concat( ),直接看个栗子就很清楚了     例:students表中有元组的studentId="91611234567",            update students            set studentId=concat(substring(studentId,1,7),"3333")           where ...;          ...
PHP MYSQL 多字段数据更新
PHP MYSQL 多字段数据更新
百万级数据库性能优化(一)——创建索引
对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 为了能够使用索引,我们应该避免使用以下查询方式: 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 最好不要给数据库留NULL,尽可能的使用 NOT N...
更新表中某字段的某部分内容
在我们执行更新操作时,往往要更新一个指定字段的某部分内容,那么我们可以使用replace函数来执行这个操作。使用:语法:UPDATE 表名 set 字段名 = REPLACE(字段名,'要替换的内容','替换成的内容');实例:以下为测试表,表名称为:“text_log”idtext1这是一段话,讲述的是我们的故事。2这是一段话,讲述的是他们的故事。我们想把id为1的text字段的内容某部分内容替...
数据表中某个字段出现变化触发触发器
sql 更新触发器 更新指定字段值为某个值时触发表中有三个字段(a、b、c)假设现在表里有一条记录:a=1、b=1、c=1当字段c的内容被更新为3时候触发(更新为其他值时不触发如2、4等),触发时候同时查找出记录中a的值============================create trigger trgupdate on tablenamefor updateasdeclare @c b...
mysql 下sql语句 update 字段=字段+字符串 表字段某一个原值加一个字符串
1、要求将所有email为空的字段值改成phone连接字符串@qq.com的格式 #这是单独执行一条数据 SELECT * FROM user_list where id=30; update user_list set email=concat(phone,’@qq.com’) where id=30; #批量执行多条数据 SELECT * FROM user_list where em...
MySQL的update理解,批量更新问题: 同一张表中根据某个字段与另一个字段值,更新第三个字段
一直写select语句, 很少写复杂的update语句, 最近我想批量更新一个表,要求是更新每条数据的a字段,具体更新的值是这条数据的id字段在b字段中出现的次数.简单的理解为下图:     表: abc 把count字段更新为其id在f_id中出现的次数,update完成后应该是:     表:abc 即id为1的count值是2,因为1在f_id中出现了2次; id为2的co...
oracle 几十万的数据单表多个字段快速更新的方法
merge into 要修改的表名  别名1 using (select  要修改的字段1,要修改的字段2,  关联的字段 from 表名) 别名2 on (别名1.关联字段 = 别名2. 关联字段) when matched  then update  set  别名1.字段 = 别名2.字段  别名1.字段 = 别名2.字段...
mysql一句搞定循环更新某个字段的值
    今天遇到一个问题,数据库的某个字段为0,需求某个值需要为在一个区间的一个定制,所以写了这样一句SQL   update 表名set 字段名=replace(字段名,'0',round(rand()*(100-10)+10,0)) where 字段名= 0; round(rand()*(100-10)+10,0):生成一个10-100的随机数; replace(字段名,'0',rou...
MySQL 百万级以上分页优化
**正常我们码农数据库的时候一般都是以下这种查询方式:** select * from table order by id limit 100000, 10; **但是以上这种查询会导致我们数据慢死,一般我们采用以下方式:** select * from table order by id limit 1000000, 10; **以上这种查询也不算最快 查询大概也要十几秒,数据不算太多...
mysql优化小技巧之去除重复项(百万级数据)
    说到这个去重,脑仁不禁得一疼,尤其是出具量比较大的时候。毕竟咱不是专业的DB,所以嘞,只能自己弄一下适合自己去重方法了。    首先按照常规首段,使用having函数检查重复项,完事一个一个的删除。不要问我having检测重复项的sql咋写,你懂得哈。。。这个在只有几条重复的时候还可以。要是几千上万条不同数据重复,那咋办。。。    完事呢,咱就考虑了,用having函数查询的时候,原始s...
mysql 更新字段内指定字符串
例如:pot 列中 'yyy' 替换成 'xx' UPDATE tab set pot = REPLACE(pot,'yyy','xx');
oracle 百万条数据 update所有记录时的 sql 执行效率问题
需求: 有一张临时表 , 数据总数100w条, 其中 50w条 , state = 1 50w条 , state = 0 因为数据无用 , 所以需要 更新 所有数据的 state 为 1 ; 环境 数据库 : oracle 11g 操作系统 : win10 开发工具: PL/SQL 方案: ...
mysql高效删除大数据量表中的重复数据
boss_t_tour表目前有150W数据,其中出现了15000多条有重复记录的数据,需要删除其中的8000多条多余的记录。 如果删除小表,不担心效率,可以用下面方式删除, [url]http://jimmy9495.iteye.com/admin/blogs/2072785[/url] 但是用上面的sql如果想在大表操作删除,肯定是不行的。 查看表中imsi除了空以外重复的数...
更新需求:UPDATE 时,如果某行的某个字段为空,则将该行的某个字段数据放进去。
如果用户表没有证件照,则将注册照作为证件照。 UPDATE smart_park.tb_userSET identification_pic_id = register_pic1_pathWHERE     register_pic1_path IS NOT NULL AND identification_pic_id IS NULL;...
mysql update 字段(字符串)中的部分数据
mysql update 字段(字符串)中的部分数据 A id 1 2 name 中文 英文 str 英文234234324 rwerwerwedsdfsdf update a set str = replace(str,’英文’,’中文’) where id = 1;//如果数据是json字符串 可以使用 JSON_SET
mysql 同一个字段作为条件更新
mysql 更新一个字段的值且这个字段作为条件是,会报  Truncated incorrect DOUBLE value: '*********' 错误              例如:UPDATE admin_user SET active_time='2016-11-23'  WHERE admin_id !=1 AND active_time=0;              activ
mysql中怎么更新某个字段的值为1-200的随机数
mysql中怎么更新某个字段的值为1-200的随机数update shop set amount= (floor(1 + rand()*200)),
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 python更新教程 java开发如何高效学习