mysql优化总结

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 最近这两周⼀直在做数据存储查询优化,恰逢⽉初听了⼀次数据库技术⼤会,今天便想着对 mysql的优化做⼀下总结。这篇总结主要着眼于mysql的配置,表结构设计以及sql语句的优化。 ⼀、mysql配置优化 max_connections:最⼤客户端连接数,如果服务器的并发连接请求量⽐较⼤,建议调 ⾼此

mysql优化总结


最近这两周⼀直在做数据存储查询优化,恰逢⽉初听了⼀次数据库技术⼤会,今天便想着对 mysql的优化做⼀下总结。这篇总结主要着眼于mysql的配置,表结构设计以及sql语句的优化。


⼀、mysql配置优化


  • max_connections:最⼤客户端连接数,如果服务器的并发连接请求量⽐较⼤,建议调 ⾼此值,以增加并⾏连接数量,当然这建⽴在机器能⽀撑的情况下,因为如果连接数越多,鉴于MySql会为每个连接提供连接缓冲区,这就会开销越多的内存,所以还是需要根据系统各服务实际情况设置。


  • key_buffer_size:索引缓存⼤⼩(将从磁盘上读取的索引缓存到内存,可以设置⼤⼀ 些,有利于快速检索)。


  • innodb_buffer_pool_size: Innodb 存储引擎缓存池⼤⼩。对于 Innodb 来说最重要的 ⼀个配置,如果所有的表⽤的都是 Innodb ,那么甚⾄建议将该值设置到物理内存的 80%, Innodb 的很多性能提升如索引都是依靠这个。


  • max_allowed_packet:mysql接收的最⼤数据包⼤⼩,这个主要在批量插⼊数据场景下可以设置⼤些。


  • innodb_log_buffer_size:表⽰InnoDB写⼊到磁盘上的⽇志⽂件时使⽤的缓冲区的字节数,默认值为8M。⼀个⼤的⽇志缓冲区允许⼤量的事务在提交之前不写⽇志到磁盘。因此,如果你有很多事务的更新,插⼊或删除操作,通过这个参数会⼤量的节省了磁盘 IO。


  • innodb_log_file_size:该参数决定着mysql事务⽇志⽂件(ib_logfile0)的⼤⼩,对于 具有⼤量数据插⼊操作的应⽤来说,这个参数需要设置⼤⼀些,这样可以提⾼redo log 的IO性能,但是设置的过⼤会导致mysql故障恢复时间变⻓。


⼆、表结构优化


  • 尽可能⽤⼩的数据类型并指定较⼩的⻓度:能⽤整型就不要⽤字符串,⽤字符串尽量⽤ varchar并指定较⼩⻓度;


  • 字段尽量⽤not null:⾮ null 字段的处理要⽐ null 字段的处理⾼效些!且在sql语句中不 需要判断是否为 null;


  • 字段⼀定要加注释:之前项⽬中就是因为字段没有注释,踩了太多坑;


  • 设计表的时候,如果有⼀张表将来肯定会存储⼤量数据(这个⼀般是可以预判到的)建 议建表时预留字段,避免将来数据量⼤新增字段过于费时;


  • 遵守第⼀〜第三范式; 对于数据量⼤的表,可提前进⾏分表;


  • 建⽴索引:建⽴索引需要注意⼀定要根据实际查询⽅式来确定索引。这⾥记录⼀下我们项⽬上踩的坑:我们之前建⽴索引时对⼀张表中查询⽤到的三个列都建⽴单列索引,当查询同时涉及这三个列时,其实mysql只会⽤到其中⼀个它认为效率最优的那⼀列,这时候在存储、查询效率⽅⾯建三个单列索引明显不如建⽴⼀个组合索引划算。


三、sql语句优化


1)查询语句


  • ⾸先查询缓存⼀定要开启哈query_cache_type设为1。


  • 不要select *,需要什么字段的数据就查什么字段的数据;


  • 如果表数据量⼤,不要⼀次性将所有数据查询出来。这⾥需要注意,如果⼀张表数据量 千万级别,会发现查询前⼏万条数据效率还⾏,但是越到后边使⽤limit查询效率直线下滑,这个时候可以考虑使⽤其主键id作为查询游标,这样效率会⼤幅上升;


  • 慎⽤in查询,in查询不使⽤索引有时候会导致全表扫描,如果查询参数是连续数值,那就⽤between;


  • 连表查询时确保⼩表驱动⼤表,如果你不确定谁驱动谁,那就不要指定left join或者right join,直接⽤join然后让mysql⾃⼰判断;


2)数据插⼊


  • ⼤量数据插⼊时,⼀定要⽤insert values这种形式。这⾥需要注意在spring项⽬中批量 插⼊⼤量数据⼀定要⽤jdbc执⾏原⽣sql,不要⽤mybatis,mybatis由于要做字段映射, ⼤量使⽤java反射机制,会导致性能损耗;


  • ⼤量数据插⼊时,最好不要并发执⾏,这会导致query排队,最好设计⼀个专门⽤于数据存储的服务,所有数据插⼊都交由它执⾏;


以上就是⼀些常⻅的mysql优化了,当然并不全,后续还会进⾏补充。



相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
10天前
|
SQL 关系型数据库 MySQL
MySQL慢查询优化、索引优化、以及表等优化详解
本文详细介绍了MySQL优化方案,包括索引优化、SQL慢查询优化和数据库表优化,帮助提升数据库性能。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
MySQL慢查询优化、索引优化、以及表等优化详解
|
15天前
|
缓存 监控 关系型数据库
如何优化MySQL查询速度?
如何优化MySQL查询速度?【10月更文挑战第31天】
43 3
|
17天前
|
缓存 关系型数据库 MySQL
如何优化 MySQL 数据库的性能?
【10月更文挑战第28天】
42 1
|
25天前
|
NoSQL 关系型数据库 MySQL
MySQL与Redis协同作战:百万级数据统计优化实践
【10月更文挑战第21天】 在处理大规模数据集时,传统的单体数据库解决方案往往力不从心。MySQL和Redis的组合提供了一种高效的解决方案,通过将数据库操作与高速缓存相结合,可以显著提升数据处理的性能。本文将分享一次实际的优化案例,探讨如何利用MySQL和Redis共同实现百万级数据统计的优化。
64 9
|
19天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
87 1
|
25天前
|
NoSQL 关系型数据库 MySQL
MySQL与Redis协同作战:优化百万数据查询的实战经验
【10月更文挑战第13天】 在处理大规模数据集时,传统的关系型数据库如MySQL可能会遇到性能瓶颈。为了提升数据处理的效率,我们可以结合使用MySQL和Redis,利用两者的优势来优化数据查询。本文将分享一次实战经验,探讨如何通过MySQL与Redis的协同工作来优化百万级数据统计。
55 5
|
29天前
|
存储 关系型数据库 MySQL
优化 MySQL 的锁机制以提高并发性能
【10月更文挑战第16天】优化 MySQL 锁机制需要综合考虑多个因素,根据具体的应用场景和需求进行针对性的调整。通过不断地优化和改进,可以提高数据库的并发性能,提升系统的整体效率。
54 1
|
30天前
|
缓存 关系型数据库 MySQL
一文彻底弄懂MySQL优化之深度分页
【10月更文挑战第24天】本文深入探讨了 MySQL 深度分页的原理、常见问题及优化策略。首先解释了深度分页的概念及其带来的性能和资源问题。接着介绍了基于偏移量(OFFSET)和限制(LIMIT)以及基于游标的分页方法,并分析了它们的优缺点。最后,提出了多种优化策略,包括合理创建索引、优化查询语句和使用数据缓存,帮助提升分页查询的性能和系统稳定性。
|
20天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第26天】数据库作为现代应用系统的核心组件,其性能优化至关重要。本文主要探讨MySQL的索引策略与查询性能调优。通过合理创建索引(如B-Tree、复合索引)和优化查询语句(如使用EXPLAIN、优化分页查询),可以显著提升数据库的响应速度和稳定性。实践中还需定期审查慢查询日志,持续优化性能。
47 0
|
28天前
|
存储 监控 关系型数据库
MySQL并发控制与管理:优化数据库性能的关键
【10月更文挑战第17天】MySQL并发控制与管理:优化数据库性能的关键
122 0