单表千万级别大数据量更新方案

生产单表数据5千万,要更新其中5万条数据的其中几个字段。

以下使用开发环境,单表150万,更新5万条左右数据。使用了以下三种方案。

 

1,使用以下语句,批量执行

update table set field1=1,field2=2 where field3=3 and field4=4

执行几秒钟就挂了

 

2,先通过条件将要更新数据查出,使用replace into ,原理先删后插,没有指定值的字段,将会默认为空

replace into t_result_item(item_id,score,recognition_value)

VALUES

<foreach collection="list" item="item" separator="," close=";">

(#{item.itemId},#{item.score},#{item.recognitionValue})

</foreach>

14秒左右 维护索引

 

3,先通过条件将要更新数据查出,使用insert into on duplicate key update ,原理尝试插入,若存在则更新,没有指定值的字段,将会默认为原数据的值

insert into t_result_item(item_id,score,recognition_value)

VALUES

<foreach collection="list" item="item" separator="," close="">

(#{item.itemId},#{item.score},#{item.recognitionValue})

</foreach>

on duplicate key update

score = VALUES(score),

recognition_value = VALUES(recognition_value)

8秒左右

 

使用update语句执行次数太多,太耗性能;replace方案原理是先删后插,此过程会维护索引;insert 方案原理是尝试插入,若存在则更新,不存在再次维护索引,最终使用第三种方案

 

 

 

 

 

 

 

 

 

 

 

转载于:https://my.oschina.net/WWWW23223/blog/1790387

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用: 使用阿里云rds for MySQL数据库(就是MySQL5.6版本),有个用户上网记录表6个月的数据近2000万,保留最近一年的数据达到4000万,查询速度极慢,日常卡死。严重影响业务。 引用: mysql数据库本身高度灵活,造成性能不足,严重依赖开发人员能力。也就是说开发人员能力高,则mysql性能高。这也是很多关系型数据库的通病,所以公司的dba通常工资巨高。 引用: 以上三种方案,按顺序使用即可,数据在亿级别一下的没必要换nosql,开发成本太高。三种方案我都试了一遍,而且都形成了落地解决方案。该过程心中慰问跑路的那几个开发者一万遍 :) 方案一详细说明:优化现有mysql数据库。 根据引用内容,你提到的mysql表数据过大,导致查询速度变慢,业务受到严重影响。MySQL数据库本身的灵活性使得其性能有所不足,且高度依赖开发人员的能力。因此,为了解决这个问题,可以考虑以下几个方案: 1. 优化现有MySQL数据库:对于表数据过大的情况,可以通过对数据库进行优化来提高查询性能。这包括合理设计表结构、创建索引、优化SQL语句等。可以使用MySQL自带的性能优化工具如EXPLAIN语句和慢查询日志来帮助识别性能瓶颈和优化查询。 2. 水平分表:如果数据仍然无法满足需求,可以考虑将表按照某个维度进行水平分割,将数据分散到多个表中,以减轻单表数据。例如,可以按照时间或者用户ID等维度进行分表,然后通过应用层逻辑将多个表的数据合并查询。 3. 数据库分库分表:如果数据进一步增长到亿级别,可以考虑将数据库进行分库分表。这意味着将数据分散到多个数据库实例和表中,以提高查询性能和可扩展性。这可以通过使用分布式数据库中间件如MySQL的分库分表插件或者使用NoSQL数据库来实现。 综上所述,对于mysql表数据过大的情况,可以通过优化现有数据库、水平分表和数据库分库分表等方案来提高查询性能和解决业务影响的问题。具体方案的选择需根据实际情况和需求来确定。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [MySQL单表数据大优化方案及注意事项](https://blog.csdn.net/a991361563/article/details/120038498)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值