您的位置:首页 > 数据库 > MySQL

[置顶] 【MySql】Sql优化(二)——影响性能的因素

2017-11-29 16:42 615 查看

一、前言

在上一篇博客中,小编向大家简单介绍了一下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优化。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: