MySQL-优化INSERT、UPDATE和DELETE

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: MySQL MyISAM INSERT UPDATE DELETE Optimizing

目录

  1. 优化INSERT语句
  2. 优化UPDATE语句
  3. 优化DELETE语句

这部分内容来说明加速数据更改类语句:INSERT、UPDATE和DELETE。

优化INSERT语句

概述

为了优化insert的速度,可以将很多小的操作组合成一个大的操作来优化。理想情况下,你可以与MySQL建立一个连接,然后发送一条多行数据插入语句,并且延迟所有索引更新和一致性检查到最后。

对于插入一行的消耗由以下因素确定,每个因素中的数字表示时间消耗大概的时间占比:

  • 建立连接 :(3) 建立数据库连接池,实现多路复用
  • 发送查询到Server:(2)
  • 解析查询:(2)
  • 插入行:(1 * 行大小)发送数据尽可能小
  • 插入索引:(1 * 索引数) 表索引数量尽可能少
  • 关闭连接:(1) 数据库连接池与超时关闭连接,减少关闭连接的次数

以上内容没有考虑打开表的初始消耗,因为每个并发运行的查询,打开表的初始开销只有一次。

假设使用B-tree索引的情况下, 表的大小会减慢logn的索引插入速度。

优化方法

你可以使用以下方法来加速插入:

  • 如果你可以将相同客户端在同一时间的多条插入语句组合成INSERT with multiple VALUES这样的一个插入语句,那么就会加速插入速度。这种处理在大多数情况下被认为比单条INSERT语句速度要快。如果你添加数据到一个非空表中,你可以调整bulk_insert_buffer_size变量让插入更快。
  • 当你从一个文本文件中加载数据到一张表时,你可以使用LOAD DATA语句。这会比使用INSERT语句快20倍。
  • 使用列默认值。这样可以减少MySQL的解析开销并提升查询速度。

优化UPDATE语句

概述

更新的优化像LIKE查询的优化,只是需要有数据写入的消耗。写入的速度依赖于更新数据的总量和索引更新的数量。没有更改索引列的数据就不会更新索引。
另一种加速更新的方法是延迟更新然后对一行做多次更新。如果UPDATE语句锁表,那么一次执行多个update比多次执行一个update要快很多。

优化方法

  • 更新时尽可能避免索引更新,这样可以避免索引更新带来的开销。
  • 合并update对同一行执行多次更新。

优化DELETE语句

概述

在MyISAM表中删除一行的主要时间开销是删除索引的数量。为了更快的删除行,可以增加key_buffer_size系统变量的大小。

如果删除MyISAM表中的所有行,使用TRUNCATE TABLE tbl_name比DELETE FROM tbl_name要快很多。但是TRUNCATE 操作不是事务安全的;当有活动的事务或者表锁是TRUNCATE操作会失败。

优化方法

  • 表尽可能少索引。
  • 通过增加key_buffer_size来加速删除。
  • 清空表尽量用TRUNCATE_TABLE,因为速度快,但是不是事务安全的。

总结

  1. 优化INSERT可以尽可能单条插入合并为多条插入和使用默认值,合并单条为多条场景可以是消息中间件消费时对业务数据批量处理后合并插入。
  2. 优化UPDATE也是尽可能合并更新,并且尽可能避免索引更新(这是在业务允许的情况下)。
  3. 优化DELETE是尽可能减少索引数量,并通过增加缓冲大小来加速。如果是清空表,那么truncate比delete速度快。

原文链接

  1. https://dev.mysql.com/doc/refman/8.0/en/data-change-optimization.html
  2. https://dev.mysql.com/doc/refman/8.0/en/insert-optimization.html
  3. https://dev.mysql.com/doc/refman/8.0/en/update-optimization.html
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
4天前
|
关系型数据库 MySQL 测试技术
MySQL的`IN`的优化经验
限制IN列表的长度:IN子句中的元素数量较多时,会显著降低查询性能。尽量减少IN中的项数量。
|
4天前
|
关系型数据库 MySQL Unix
linux优化空间&完全卸载mysql——centos7.9
linux优化空间&完全卸载mysql——centos7.9
56 7
|
4天前
|
SQL 存储 关系型数据库
不允许你不知道的 MySQL 优化实战(三)
不允许你不知道的 MySQL 优化实战(三)
27 1
|
4天前
|
SQL 关系型数据库 MySQL
不允许你不知道的 MySQL 优化实战(二)
不允许你不知道的 MySQL 优化实战(二)
27 2
|
2天前
|
SQL 存储 关系型数据库
Mysql优化提高笔记整理,来自于一位鹅厂大佬的笔记,阿里P7亲自教你
Mysql优化提高笔记整理,来自于一位鹅厂大佬的笔记,阿里P7亲自教你
|
4天前
|
SQL 存储 关系型数据库
【MySQL】SQL 优化
【MySQL】SQL 优化
20 0
|
2天前
|
缓存 关系型数据库 MySQL
如何优化MySQL数据库查询性能
MySQL是一款常用的关系型数据库,但在实际使用过程中,由于数据量增加和查询操作复杂度增加,会导致查询性能下降。本文将介绍一些优化MySQL数据库查询性能的方法。
|
4天前
|
存储 算法 关系型数据库
MySQL连接的原理⭐️4种优化连接的手段性能提升240%🚀
MySQL连接的原理⭐️4种优化连接的手段性能提升240%🚀
|
4天前
|
SQL canal 运维
MySQL高可用架构探秘:主从复制剖析、切换策略、延迟优化与架构选型
MySQL高可用架构探秘:主从复制剖析、切换策略、延迟优化与架构选型
|
4天前
|
存储 算法 关系型数据库
MySQL怎样处理排序⭐️如何优化需要排序的查询?
MySQL怎样处理排序⭐️如何优化需要排序的查询?

推荐镜像

更多