做了3年php开发和大家分享一下我在日常工作中和面试过程中都会经常遇到的问题 mysql优化 , 内容比较多,我会分多次进行更新文档,谈谈我自己在工作学习中对mysql优化的理解希望对大家能有所帮助吧 (其实我不是很善于总结和表达哈哈~)
- 序言
# 既然要说mysql优化,那么我首先要搞懂能影响mysql读写运行效率的因素都有哪些?
# 下面我向大家分享一些我在实际工作中使用过的一些优化方案,希望能对大家有点启发
# 【不对的地方还望指正哦】
- 目录索引
# 首先来做个大概的目录索引列出可能影响数据库运行效率的因素吧!
> 硬件
- 内存
- CPT
- 磁盘(机械硬盘 and 固态ssd硬盘)
- 网卡
> 软件
- mysql版本选择
- mysql配置参数
- 数据表设计
- 索引
- 存储引擎
> 架构
- 读写分离
- 分表
- 分库
- RAID (0,1,10)
- 高可用方案- MHA / MMM / 多主多从架构对比选择
- 中间件
> 其他因素
- 语句运行效率
> 总结建议
# 好了,大概就这么多,下面来分别做介绍吧
- 硬件篇
- 内存
'内存很好理解,内存越大能够存储的热数据库也就越多读取数据自然也就更快,至于大小的选择这主要取决于热数据的大小,
其次预留至少20%的冗余空间即可'
- CPU
'CPU层面有两个需要考虑的方面,是选择多核CPU还是主频赫兹更高的CPU?最好的情况是两者兼具,但是这样带来的问题就是
硬件成本会高出不少,特别是在集群环境下!
那如何选择呢?
性能密集型应用:选主频赫兹更高的CPU
IO密集型应用:选多核CPU'
- 硬盘
'硬盘目前主要有两个主要分支选项,机械硬盘和固态硬盘,下面做个对标
机械硬盘:
优点: 价格低,存储空间更大,灾难恢复
缺点: 读写速度慢'
# 由于机械硬盘在工作时需要等待光盘转动到指定位置时磁头才能进行操作,所以数据在读写时必然会产生延迟,而决定延迟时间长短这主要取决于硬盘的转速
'固态硬盘:
优点: 读写速度快
缺点: 价格高,使用寿命低'
# 固态硬盘可以理解为一类产品的统称,不同类型的固态硬盘工作效率也是不同的,主要有以下几类
# SATA(最原始的), NVME , M.2, PCIE
- 网卡
'现在基本是云服务器,这个可以跳过'
- 软件篇
- SQL版本选择
'版本的选择也并非越高就越好,保险起见最好是等正式版发布两年以后在考虑升级' #【要踩的坑别人都帮你踩了】
'另外mysql5.* / 8两者的选择,我的建议是如果情况允许建议用8'
- 配置参数
'配置参数的调整是非常重要的优化措施,效果同样也可以立竿见影,玩懂配置文件mysql也算半个熟练了。'