MySQL-优化INSERT、UPDATE和DELETE

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 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
目录
相关文章
|
11天前
|
SQL 关系型数据库 MySQL
MySQL慢查询优化、索引优化、以及表等优化详解
本文详细介绍了MySQL优化方案,包括索引优化、SQL慢查询优化和数据库表优化,帮助提升数据库性能。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
MySQL慢查询优化、索引优化、以及表等优化详解
|
16天前
|
缓存 监控 关系型数据库
如何优化MySQL查询速度?
如何优化MySQL查询速度?【10月更文挑战第31天】
44 3
|
18天前
|
缓存 关系型数据库 MySQL
如何优化 MySQL 数据库的性能?
【10月更文挑战第28天】
43 1
|
26天前
|
NoSQL 关系型数据库 MySQL
MySQL与Redis协同作战:百万级数据统计优化实践
【10月更文挑战第21天】 在处理大规模数据集时,传统的单体数据库解决方案往往力不从心。MySQL和Redis的组合提供了一种高效的解决方案,通过将数据库操作与高速缓存相结合,可以显著提升数据处理的性能。本文将分享一次实际的优化案例,探讨如何利用MySQL和Redis共同实现百万级数据统计的优化。
68 9
|
20天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
95 1
|
26天前
|
NoSQL 关系型数据库 MySQL
MySQL与Redis协同作战:优化百万数据查询的实战经验
【10月更文挑战第13天】 在处理大规模数据集时,传统的关系型数据库如MySQL可能会遇到性能瓶颈。为了提升数据处理的效率,我们可以结合使用MySQL和Redis,利用两者的优势来优化数据查询。本文将分享一次实战经验,探讨如何通过MySQL与Redis的协同工作来优化百万级数据统计。
56 5
|
1月前
|
存储 关系型数据库 MySQL
优化 MySQL 的锁机制以提高并发性能
【10月更文挑战第16天】优化 MySQL 锁机制需要综合考虑多个因素,根据具体的应用场景和需求进行针对性的调整。通过不断地优化和改进,可以提高数据库的并发性能,提升系统的整体效率。
57 1
|
1月前
|
缓存 关系型数据库 MySQL
一文彻底弄懂MySQL优化之深度分页
【10月更文挑战第24天】本文深入探讨了 MySQL 深度分页的原理、常见问题及优化策略。首先解释了深度分页的概念及其带来的性能和资源问题。接着介绍了基于偏移量(OFFSET)和限制(LIMIT)以及基于游标的分页方法,并分析了它们的优缺点。最后,提出了多种优化策略,包括合理创建索引、优化查询语句和使用数据缓存,帮助提升分页查询的性能和系统稳定性。
102 1
|
21天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第26天】数据库作为现代应用系统的核心组件,其性能优化至关重要。本文主要探讨MySQL的索引策略与查询性能调优。通过合理创建索引(如B-Tree、复合索引)和优化查询语句(如使用EXPLAIN、优化分页查询),可以显著提升数据库的响应速度和稳定性。实践中还需定期审查慢查询日志,持续优化性能。
49 0
|
30天前
|
存储 监控 关系型数据库
MySQL并发控制与管理:优化数据库性能的关键
【10月更文挑战第17天】MySQL并发控制与管理:优化数据库性能的关键
131 0
下一篇
无影云桌面