MySQL批量更新的四种方式总结
作者:凌陨心 发布时间:2024-01-13 17:53:08
标签:mysql,批量更新,sql
直接update的弊端
最近做一个需求,更新3w条数据,一个一个update去更新的,结果花了80分钟,这样性能上很差,也容易阻塞,所以就找了一些MySQL批量更新的方式,在此记录一下
方法一;replace into
这种更新会将其它字段更新为默认值,因为它是先将重复记录删掉再更新,谨慎使用
replace into `user` (id,age) values (1,'2'),(2,'3'),(3,'4'),(4,'98');
-- > 时间: 0.038s
方法二:insert into [table] values… on duplicate key update
这种方式应该也是删掉记录,再更新,但是保存的原来的其它字段数据,所以其它字段不会改变
insert into `user`(id,age) values (1,'5'),(2,'7'),(3,'2'),(4,'198') on duplicate key update age=values(age)
-- > > 时间: 0.017s
方法三:创建临时表
创建临时表,将更新数据插入临时表,再执行更新,需要有建表权限
DROP TABLE if EXISTS tmp;
-- > 时间: 0.016s
create temporary table tmp(id int(4) primary key,age varchar(50));
-- > 时间: 0.01s
insert into tmp values (1,'13'), (2,'16'),(3,'18'),(4,'18');
-- > 时间: 0.009s
update `user`, tmp set `user`.age=tmp.age where `user`.id=tmp.id;
-- > 时间: 0.022s
方法四:使用MySQL自带批量更新语句
update `user`
set age = CASE id
WHEN 1 THEN '22'
WHEN 2 THEN '22'
WHEN 3 THEN '22'
WHEN 4 THEN '22'
END WHERE id IN(1,2,3,4);
-- > 时间: 0.015s
update (表名)
set (更新字段) = case (被更新字段)
when (被更新字段值) then (更新字段值)...
end where (被更新字段) in((被更新字段值)...)
举例说明:set age = CASE id WHEN 1 THEN ‘22’
简单来说就是以id为查询条件,当id=1时更新age=22,where语句提高了sql的执行效率,先过滤需要修改的记录然后再更新。
来源:https://blog.csdn.net/qq_33534428/article/details/124709747
0
投稿
猜你喜欢
- 在使用django-rest-framework开发项目的时候我们总是避免不了跨域的问题,因为现在大多数的项目都是前后端分离,前后端项目部署
- 一.CSRF简介CSRF是什么? CSRF(Cross-site request forgery),中文名称:跨站
- 使用python完成超级基础的学生管理系统,供大家参考,具体内容如下说明:1、本学生管理系统非常非常简易,只有增,显,查,删,改功能,对于P
- python 里面与时间有关的模块主要是 time 和 datetime如果想获取系统当前时间戳:time.time(),是一个float型
- 前言最近有人问我装饰器是什么,我就跟他说,其实就是装饰器就是类似于女孩子的发卡。你喜欢的一个女孩子,她可以有很多个发卡,而当她戴上不同的发卡
- 本文介绍了PyTorch上搭建简单神经网络实现回归和分类的示例,分享给大家,具体如下:一、PyTorch入门1. 安装方法登录PyTorch
- 一般我们是利用Session对象来防止通过“刷新”增加计数器的访问量的,看看下面的做法;<%If IsEmpty(Sessi
- 此文用来正式回复大辉同学的疑问。1、结论:固定宽度只适合功能型网站,不适合希望用户认真阅读的浏览型网站。UCD大社区是浏览型网站,它的定位是
- 本文实例讲述了python实现自动更换ip的方法。分享给大家供大家参考。具体实现方法如下:#!/usr/bin/env python#-*-
- 1.导入模块import cv2 as cvimport numpy as np 2.OpenCV绘图大致步骤OpenCV 图形绘制步骤(1
- 在我们的`` current_datetime`` 视图范例中,尽管内容是动态的,但是URL ( /time/ )是静态的。 在 大多数动态
- 一、当前时间戳获取当前时间戳,即当前系统内表示时间的一个浮点数import timetime.time()二、获取当前时间字符串获取当前时间
- 本文实例主要实现的是使用urllib和BeautifulSoup爬取 * 的词条,具体如下。简洁代码:#引入开发包from urllib.
- 利用上一篇的框架,再写了个翻转棋的程序,为了调试minimax算法,花了两天的时间。几点改进说明:拆分成四个文件:board.py,play
- 在看fastai的代码时,看到这么一段:n=100x = torch.ones(n,2) x[:,0].uniform_(-1.,1)x[:
- 目录一 列表二 集合三 字典总结一 列表# 列表:包含0个或多个对象引用的有序队列,用中括号[]表示# 增加 a = [] a.append
- 列表 List列表是任意对象的集合,在 Python 中通过逗号分隔的对象序列括在方括号 ( [] ) 中people_list = [
- 前言很多时候开发者需要删除文件。可能是他错误地创建了文件,或者不再需要该文件。无论出于何种原因,都有一些方法可以通过Python来删除文件,
- 查看某一列中有多少中取值:数据集名.drop_duplicates(['列名'])#实际为删除重复项,删除后对原数据集不修改
- 一、安装相关的模块首先第一步的话我们需要安装相关的模块,通过pip命令来安装pip install gif另外由于gif模块之后会被当做是装