Java实用技术@数据库8种优化方式


【Java实用技术@数据库8种优化方式】
Java实用技术@数据库8种优化方式
本文插图
一:简介
MySQL性能优化是通过优化各个方面的 , 不仅仅是优化SQL语句这一方面 , 而是通过各各方面的优化 , 每个地方优化一些 , 这样整体性能就会有明显的提升 。 二:优化方式1. 优化数据库表结构的设计
为什么数据库表的设计会影响性能?
字段的数据类型:不同的数据类型的存储和检索方式不同 , 对应的性能也不同 , 所以说要合理的选用字段的数据类型 。 比如人的年龄用无符号的unsigned tinyint即可 , 没必要用integer
数据类型的长度:数据库最终要写到磁盘上 , 所以字段的长度也会影响着磁盘的I/O操作 , 如果字段的长度很大 , 那么读取数据也需要更多的I/O, 所以合理的字段长度也能提升数据库的性能 。 比如用户的手机号11位长度 , 没必要用255个长度 。
表的存储引擎:常用的存储引擎有MyISAM、InnoDB、Memory , 不同的存储引擎拥有不同的特性 , 所以要合理的利用每种存储引擎的长处和优点来提供数据的性能 。 MyISAM不支持事务 , 表级锁 , 但是查询速度快 , InnoDB支持事务 , 行锁 。 2. SQL优化
MySQL性能优化的一个很重要的手段就是对SQL语句的优化 。 其中最重要的方式就是使用索引 。 3. 分表
当一个表的数据量很大的时候 , 查询就变的很慢 , 所以减少表里的记录的数量是优化的一种方式 , 这种方式就是将一张表的数据拆分成多张表 , 这样每张表的数量就减少了 , 这样查询速度就相对来说就快了一些 。
大表对DDL操作有一定的影响 , 如创建索引 , 添加字段 修改表结构需要长时间锁表 , 会造成长时间的主从延迟 , 影响正常的数据操作4. 大事务
大事务:运行时间比较长 , 操作的数据比较多的事务 风险:锁定太多的数据 , 造成大量的阻塞和锁超时 , 回滚时所需时间比较长 , 执行时间长容易造成主从延迟
避免一次处理太多的数据 , 移除不必要在事务中的select操作5. 数据库参数配置优化(很重要)
mysql是一个高度定制化的数据库系统 , 提供了很多配置参数(如最大连接数、数据库占用的内存等) , 这些参数都有默认值 , 一般默认值都不是最佳的配置 , 一般都需要根据应用程序的特性和硬件情况对mysql的配置进行调整 。
例如最大连接数默认为100 , 即使SQL语句优化的再好 , 硬件设备配置再高 , 当请求超过100时都要再等待 , 这就是配置不合理导致MySQL不能发挥它的最大能力 。 6. 主从复制 , 读写分离
一台MySQL服务器同一时间点支持的并发数是有限的 , 当大量并发(如秒杀活动等 , 很多用户都同一时刻访问数据库)时 , 一台数据库处理不过来 , 所以增加MySQL服务器的数量也是一种增强数据库性能的方式 。
通过使用MySQL主从复制 , 增删改操作走Master主服务器 , 查询走Slaver从服务器 , 这样就减少了只有一台MySQL服务器的压力 。 7. 增加缓存层
减少数据库连接也是一种优化手段 , 有些查询可以不用访问数据库 , 可以通过使用缓存服务器如redis、memcache、elasticsearch等增加缓存 , 减少数据库的连接8. 升级服务器硬件
当所有优化手段都用了 , 性能仍需要优化 , 那么只有升级MySQL服务器端硬件了 , 更快的磁盘IO设备 , 更强的CPU , 更大的内存 , 更大的网卡流量(带宽)等 。
总之对MySQL性能的提升 , 是通过各个方面来提升的 , 每个方面都提升一点 , 整体加起来就有明显的提升 。