update更新很慢(字段类型引发)

update更新很慢(字段类型引发)

开发人员在sql审核平台提交了2000多条update语句,每条语句只更新一条,where条件由索引,在sql审核平台在测试执行阶段已经执行了20多分钟。于是让看一下数据库后台线程是不是还在跑。

于是进入到mysql中执行:

mysql> pager grep -v Sleep;

mysql> show processlist;

发现还在跑,下面是经过处理的sql:

UPDATE port SET name = ‘xxx’, tel = ‘121212121212’ WHERE order_id = 052001;

因为该服务器只用来测试阶段使用(就是先在该服务器执行一遍然后回滚,没问题后再去主库执行),所以机器性能并不是很好,如是看了一下IO情况:

update更新很慢(字段类型引发)update更新很慢(字段类型引发)

发现一直是打满的情况,并且iowait也存在,于是开始就怀疑了是IO的问题,于是让开发将2000条sql,先提交100条看看,100条还是很慢,但是其他工单(测试用的同一个服务器)就比较快,于是感觉想的方向不对,开始查看表结构,果然看到了问题:

mysql> select count(*) from port;

大概300w条数据。

mysql> show create table port;

order_id varchar(20) NOT NULL DEFAULT ” COMMENT ‘订单ID’

该条件字段类型为varchar,而update的时候用的是int,没有加引号,所以引发了隐式类型转换,导致不能走索引,进而全表扫描,执行一条大概7s,2000*7/60≈3小时,对于2000条数据是一个比较庞大的一个时间呀!!!

根据官方文档的描述:

update更新很慢(字段类型引发)update更新很慢(字段类型引发)

简单解释一下就是:

① 如果比较操作中的两个参数都是字符串,则将它们作为字符串进行比较。

② 如果两个参数都是整数,则将它们作为整数进行比较。

③ 如果其中一个参数是TIMESTAMP或DATETIME列,而另一个参数是常量,则在执行比较之前将常量转换为时间戳。

④在所有其他情况下,参数都作为浮点数(双精度)进行比较。例如,字符串和数字操作数的比较会以浮点数的比较方式进行。

重要的是第④点,我们这里就是因为这个导致的,都进行了隐式转换不能走索引,导致全表扫。

最后,在设计表结构的时候,也要特别注意,要知道以后业务中该字段需要存储什么和使用什么类型的内容,再有查询和修改的时候要确认一下条件的字段类型。

Original: https://www.cnblogs.com/ordinarydba/p/16318074.html
Author: DB文档搬运工
Title: update更新很慢(字段类型引发)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/621786/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • centos8 安装python

    镜像:CentOS Linux release 8.5.0-13 python下载地址:Python Source Releases | Python.org 选择所需要的版本,我…

    数据库 2023年6月11日
    0110
  • [转]failed to recv data in handshakeReceive2Callback

    一直用的好好地Shadowsocks今天突然发现打不开网页了,看了下日志发现被”failed to recv data in handshakeReceive2Call…

    数据库 2023年6月14日
    087
  • mysql范式

    mysql范式: mysql建表的规范格式 第一范式:保证每列的原子性(字段不能再分解) 第一种范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值,则数据库满足第一…

    数据库 2023年5月24日
    092
  • HTML5基础知识

    作者导言: 引用偶像刘德华的一句话 “学到的就要教人,赚到的就要给人”! 以下是关联的web前端基础知识文章,通过这些文章,您既可以系统地学习和了解这些知识…

    数据库 2023年6月14日
    061
  • 19-TCP、UDP的区别和应用场景

    可靠性TCP 提供交付保证,这意味着一个使用TCP协议发送的消息是保证交付给客户端的,如果消息在传输过程中丢失,那么它将重发。UDP是不可靠的,它不提供任何交付的保证,一个数据包在…

    数据库 2023年6月16日
    099
  • 我的JAVA面试题备忘录

    以下是我收集的一些问题,有的是网上摘录的,有的是自己参加面试被问到的,有的是工作或学习时遇到的,等等。 为什么要记录这些呢? 一方面,我相信,这样做对我自己的技术提升是有帮助的。在…

    数据库 2023年6月6日
    061
  • mysql常用操作汇总

    工作中经常用会遇到这种情况,可以访问mysql所在的服务器,但是服务器端口不对外暴露(通常因为安全原因)。这时,操作数据库只能通过命令行和 mysql client窗口来实现。我对…

    数据库 2023年5月24日
    080
  • 渗透攻防Web篇-深入浅出SQL注入

    1 背景 京东SRC(Security Response Center)收录大量外部白帽子提交的sql注入漏洞,漏洞发生的原因多为sql语句拼接和Mybatis使用不当导致。 2 …

    数据库 2023年5月24日
    0107
  • Java项目服务器跨域设置

    引入jar包 cors-filter-2.6 :http://central.maven.org/maven2/com/thetransactioncompany/cors-fil…

    数据库 2023年6月16日
    083
  • 从零开始的常用MySQL语句练习大全

    很多时候深入学习固然很重要,但是想要写下一篇给新手都能看得懂看的很香,并且老鸟可以查漏补缺的的练习博客,还是挺有难度,所以今天尝试写一些关于MySQL的语句练习大全,供想要从零开始…

    数据库 2023年6月11日
    089
  • java 桥接方法

    1.桥接方法简介 桥接方法是jdk1.5引入泛型后,为使java泛型方法生成的字节码与jdk1.5版本之前的字节码兼容由编译器自动生成的。 可用 method.isBridge()…

    数据库 2023年6月16日
    098
  • 【MySQL】MySQL的安装、卸载、配置、登陆和退出

    1 MySQL安装 安装环境:Win10 64位软件版本:MySQL 5.7.24 解压版 1.1 下载 https://downloads.mysql.com/archives/…

    数据库 2023年5月24日
    092
  • MySQL45讲之InnoDB刷脏策略

    本文介绍 InnoDB 的刷脏控制策略,它是如何控制刷脏速率的,以及一些相关参数。 了解 MySQL 的刷脏策略有什么意义? 当一条正确的 SQL 执行时偶尔延迟较高,无法复现场景…

    数据库 2023年5月24日
    078
  • 未婚妻晚安之后依然在线,于是我用20行代码写了个小工具

    最近发现未婚妻一到晚上总是很忙的样子,每晚匆匆忙忙道过晚安就不说话了。 可是,QQ头像却会偶尔亮起来,我非常担心,是不是账号被盗了呢?然后,就想帮未婚妻排查一下,于是就用pytho…

    数据库 2023年6月14日
    076
  • Java韩顺平

    慢慢更新 什么是程序 程序是有序指令的集合 CMD编译执行Java文件 编译:javac 文件名.java执行:java 文件名 文件夹地址栏 输入 CMD 弹出本文件夹命令行 J…

    数据库 2023年6月11日
    060
  • Dubbo源码(三)-服务导出(生产者)

    前言 本文基于Dubbo2.6.x版本,中文注释版源码已上传github:xiaoguyu/dubbo 在了解了Dubbo SPI后,我们来了解下Dubbo服务导出的过程。 Dub…

    数据库 2023年6月11日
    090
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球