为什么要进行数据库优化
1、避免网站出现访问错误
1)数据库链接timout产生页面5xx错误
2)慢查询造成的页面无法加载
3)阻塞造成数据无法提交
2、增加数据库的稳定性
1)很多数据库问题都是由于低效的查询引起的
2)随着时间的推移,系统变得极其臃肿,数据库中的数据越来越大,数据检索越来越困难,整个系统带来的资源消耗就越来越大,系统越发不稳定
3、优化用户体验
1)流畅的页面访问速度
2)良好的网站功能体验
图解优化层面
mysql数据库优化层面
1、商业需求层面
1)不合理需求造成资源投入产出比过低
2)无用的功能堆积使得系统过度繁杂,影响整体新能
2、系统架构层面
1)数据库中存放的数据都是适合在数据库中存放么?
#例如多媒体文件,寻找第三方存储服务器,例如fastdfs,oss
#流水队列数据,不断的insert update会不停的膨胀,日志不停的翻倍堆积,解决方式:消息队列削峰
#超大文本数据,性能低下和空间占用问题
2)合理利用应用层的Cache机制
#活跃的变化较少的数据使用缓存来缓解数据库的压力
3)数据层实现尽量精简
#合理的利用索引和函数机制等,解决性能提升
3、SQL及索引优化层面
1)根据需求写出良好的SQL,并创建有效的索引,实现某一种需求可以有多重写法,我们就要选择一种最高效的写法,SQL优化
2)SQL优化的目的之一就是减少中间结果集,降低物理IO,例如多表关联查询
4、数据库表结构优化
1)根据数据库的范式,设计表结构,表结构设计的好坏直接关系到SQL语句的复杂程度
2)适当的将表进行拆分,原本需要做join的查询,只需要一张单表查询就可以
5、系统配置优化
1)大多数运行在Linux机器上,如tcp链接数的限制、打开文件数的限制,安全性的限制,因为我们要对这些配置进行相应的优化
6、硬件配置优化
1)数据库主机的IO性能是最需要优先考虑的因素
2)数据库主机和普通的应用程序服务器相比,资源要相对集中很多,单台主机上所需要进行的计算量自然也比较多,所以数据库主机的CPU处理能力也是一个重要因素
3)数据库主机的网络设备(网卡)的性能也可能成为系统的瓶颈
慢查询
1、检查慢查询开关
show variables like '%slow_query_log%';
2、设置检查慢开关
set global slow_query_log=on;
3、慢查日志判断标准
show variables like 'long_query_time';
4、设置慢查日志时间,以秒为单位
set global long_query_time=1;