MySQL-优化INSERT、UPDATE和DELETE

本文涉及的产品
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用版 2核4GB 50GB
简介: 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
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
9天前
|
存储 关系型数据库 MySQL
mysql optimizer_switch : 查询优化器优化策略深入解析
mysql optimizer_switch : 查询优化器优化策略深入解析
|
10天前
|
关系型数据库 MySQL 数据库
MySQL索引优化:深入理解索引合并
MySQL索引优化:深入理解索引合并
|
2天前
|
关系型数据库 MySQL 数据库
MySQL索引的类型与优化方法
MySQL索引的类型与优化方法
|
3天前
|
SQL Oracle 关系型数据库
MySQL单表千万级数据查询优化大家怎么说(评论有亮点)
单表千万级数据是MySQL查询的一个坎,可能还不是天花板。“一个人走的慢,一群人走的快”,通过讨论可以发现MySQL千万数据的全貌大概是怎样的。
15 0
|
4天前
|
存储 关系型数据库 MySQL
MySQL索引设计原则与优化策略
MySQL索引设计原则与优化策略
|
4天前
|
关系型数据库 MySQL 数据库
MySQL索引的类型与优化方法
MySQL索引的类型与优化方法
|
5天前
|
存储 关系型数据库 MySQL
MySQL索引设计原则与优化策略
MySQL索引设计原则与优化策略
|
5天前
|
关系型数据库 MySQL 索引
MySQL之优化SELECT语句
以上只是一些基本的优化策略,具体的优化方案还需要根据实际的业务需求和数据情况来定制。
8 0
|
9天前
|
供应链 关系型数据库 MySQL
MySQL的`FOR UPDATE`详解
MySQL的`FOR UPDATE`详解
9 0
|
9天前
|
关系型数据库 MySQL 数据库
DELETE、TRUNCATE 和 DROP 在MySQL中的区别及使用示例
DELETE、TRUNCATE 和 DROP 在MySQL中的区别及使用示例
22 0