MySQL-优化INSERT、UPDATE和DELETE

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
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
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
8天前
|
关系型数据库 MySQL Linux
MySQL原理简介—6.简单的生产优化案例
本文介绍了数据库和存储系统的几个主题: 1. **MySQL日志的顺序写和数据文件的随机读指标**:解释了磁盘随机读和顺序写的原理及对数据库性能的影响。 2. **Linux存储系统软件层原理及IO调度优化原理**:解析了Linux存储系统的分层架构,包括VFS、Page Cache、IO调度等,并推荐使用deadline算法优化IO调度。 3. **数据库服务器使用的RAID存储架构**:介绍了RAID技术的基本概念及其如何通过多磁盘阵列提高存储容量和数据冗余性。 4. **数据库Too many connections故障定位**:分析了MySQL连接数限制问题的原因及解决方法。
|
11天前
|
SQL 关系型数据库 MySQL
MySQL进阶突击系列(07) 她气鼓鼓递来一条SQL | 怎么看执行计划、SQL怎么优化?
在日常研发工作当中,系统性能优化,从大的方面来看主要涉及基础平台优化、业务系统性能优化、数据库优化。面对数据库优化,除了DBA在集群性能、服务器调优需要投入精力,我们研发需要负责业务SQL执行优化。当业务数据量达到一定规模后,SQL执行效率可能就会出现瓶颈,影响系统业务响应。掌握如何判断SQL执行慢、以及如何分析SQL执行计划、优化SQL的技能,在工作中解决SQL性能问题显得非常关键。
|
3天前
|
缓存 算法 关系型数据库
MySQL底层概述—8.JOIN排序索引优化
本文主要介绍了MySQL中几种关键的优化技术和概念,包括Join算法原理、IN和EXISTS函数的使用场景、索引排序与额外排序(Using filesort)的区别及优化方法、以及单表和多表查询的索引优化策略。
MySQL底层概述—8.JOIN排序索引优化
|
4天前
|
SQL 关系型数据库 MySQL
MySQL底层概述—7.优化原则及慢查询
本文主要介绍了:Explain概述、Explain详解、索引优化数据准备、索引优化原则详解、慢查询设置与测试、慢查询SQL优化思路
MySQL底层概述—7.优化原则及慢查询
|
4天前
|
存储 缓存 关系型数据库
MySQL底层概述—5.InnoDB参数优化
本文介绍了MySQL数据库中与内存、日志和IO线程相关的参数优化,旨在提升数据库性能。主要内容包括: 1. 内存相关参数优化:缓冲池内存大小配置、配置多个Buffer Pool实例、Chunk大小配置、InnoDB缓存性能评估、Page管理相关参数、Change Buffer相关参数优化。 2. 日志相关参数优化:日志缓冲区配置、日志文件参数优化。 3. IO线程相关参数优化: 查询缓存参数、脏页刷盘参数、LRU链表参数、脏页刷盘相关参数。
MySQL底层概述—5.InnoDB参数优化
|
6天前
|
关系型数据库 MySQL 数据库
从MySQL优化到脑力健康:技术人与效率的双重提升
聊到效率这个事,大家应该都挺有感触的吧。 不管是技术优化还是个人状态调整,怎么能更快、更省力地完成事情,都是我们每天要琢磨的事。
56 23
|
6天前
|
SQL 关系型数据库 MySQL
MySQL原理简介—11.优化案例介绍
本文介绍了四个SQL性能优化案例,涵盖不同场景下的问题分析与解决方案: 1. 禁止或改写SQL避免自动半连接优化。 2. 指定索引避免按聚簇索引全表扫描大表。 3. 按聚簇索引扫描小表减少回表次数。 4. 避免产生长事务长时间执行。
|
23天前
|
监控 关系型数据库 MySQL
Aurora MySQL负载突增应对策略与优化方案
通过以上策略,企业可以有效应对 Aurora MySQL 的负载突增,确保数据库在高负载情况下依然保持高性能和稳定性。这些优化方案涵盖了从架构设计到具体配置和监控的各个方面,能够全面提升数据库的响应速度和处理能力。在实际应用中,应根据具体的业务需求和负载特征,灵活调整和应用这些优化策略。
50 22
|
1月前
|
SQL 关系型数据库 MySQL
MySQL派生表合并优化的原理和实现
通过本文的详细介绍,希望能帮助您理解和实现MySQL中派生表合并优化,提高数据库查询性能。
80 16
|
28天前
|
缓存 关系型数据库 MySQL
【深入了解MySQL】优化查询性能与数据库设计的深度总结
本文详细介绍了MySQL查询优化和数据库设计技巧,涵盖基础优化、高级技巧及性能监控。
220 0