【MySql】Sql优化(二)——影响性能的因素
一、前言
在上一篇博客中,小编向大家简单介绍了一下Mysql执行的流程:客户端发送一条查询给数据库服务器,服务器先进行权限检测,然后在缓存中查询,如果命中了缓存,就立即返回存储在缓存中的结果,如果没有,就再经过解析器解析,预处理器进行预处理,优化器优化,得到Mysql认为最优的执行计划,然后再在查询执行引擎中进行查询,把查询结果返回给用户。
SQL执行的最大瓶颈在于磁盘的IO,即数据的读取;不同SQL的写法,会造成不同的执行计划的执行,而不同的执行计划在IO的上面临完全不一样的数量级,从而造成性能的差距;
其中重要的就是查询优化器。可以说,如果优化器得到的结果是程序员认为的最优查询结果,那就最优的查询。在这篇博客中,小编就向大家介绍一下那些因素会影响sql性能。
二、影响因素
2.1 需求影响
相比开发人员都有体会吧,当实现一个需求的时候,需要在数据库中进行连表查询,有的时候表关系不满足连接。
2.2 系统架构的影响
2.2.1 那些不应该放在数据库中的数据、
二进制数据
流水队列数据
超大文本
2.2.2 缓存的使用
系统配置信息
活跃的用户的基本信息
活跃用户的定制化信息
基于时间段的统计数据
读>>>写的数据
2.2.3 其他
1、Cache 系统的不合理利用导致Cache 命中率低下造成数据库访问量的增加,同时也浪费了Cache系统的硬件资源投入;
2、过度依赖面向对象思想,对系统可扩展性的过渡追求,促使系统设计的时候将对象拆得过于离散,造成系统中大量的复杂Join语句,而MySQL Server 在各数据库系统中的主要优势在于处理简单逻辑的查询,这与其锁定的机制也有较大关系;
3、对数据库的过渡依赖,将大量更适合存放于文件系统中的数据存入了数据库中,造成数据库资源的浪费,影响到系统的整体性能,如各种日志信息;
4、过度理想化系统的用户体验,使大量非核心业务消耗过多的资源,如大量不需要实时更新的数据做了实时统计计算。
2.3 数据库设计问题
1,冗余数据的处理;
2,大表拆小表,有大数据的列单独拆成小表;
3,根据需求的展示设置更合理的表结构;
4,把常用属性分离成小表;
2.4 硬件影响
1,提高IO指标
IOPS:每秒可提供的IO 访问次数;
IO 吞吐量:每秒的IO 总流量;
2,提高CPU计算能力;
3,如果是单独的数据库服务器,提高网络能力;
三、综上
影响sql的性能有很多的,综合考虑,需求和架构及业务实现优化:55%,
Query 语句的优化:30%,数据库自身的优化:15%
所以我们要对症下药,在下一篇博客中,小编就向大家介绍如何进行Sql优化。