帮你理解并且明白mysql常见优化的思路方案!!!
常见优化思路如下:
一,表结构设计合理(主要看是否满足三范式,当然更要结合业务)
三范式:1)保持列的原子性,不可分割
这里举个小栗子: 用户表有个address字段,然后address="中国上海".......额,很明显可分为country和city两个,
所以差评。爱动脑的可爱可能要问了,比如记录存address = "本人来自中国XX市XX县XX村"那为何呢。答案很明显,这里
地址是确定唯一的,而上面所讲的城市只要写个城市就唯一了,一切要考虑事实情况。
2 )保证列对主键的依赖性
这里举个小栗子: 这里主要对不掺杂外键的描述,任意一列都必须与主键有直接关系。
3) 保证依赖性可以传递,且列与主键不能间接相关
这里举个小栗子: 这里主要对掺杂外键的描述,比如User表跟Dept(部门表)。部门表存放User表外键(说明依赖性传递)
,而不能在该表中存用户name字段,则表示了列跟主键必须直接相关。
二,sql语句优化
这个话题就多了,稍微说说吧,后期写个博文详细介绍。
1)避免全表扫描(排除select * 等等)
2)避免 is null,in.....
3)细看 以下两个sql
select count(*) from dept ;
select count(name) from dept;
不加索引下两者效率差不多,加了后(尤其数据量多一些时)后者效率更高。
4) oracle原则大表接小表等。。。。。
5)定位慢查询
三, 索引优化、
1)设计是否合理,比如表字段性别=男或女,你也加索引。。。。(高频率相同值相当于全表扫描)
2 ) sql是否让索引失效,具体看explain select..........
四,分表技术(水平分割,垂直分割)以及分库
五,读写分离
六,定时清理mysql垃圾数据,定时进行碎片整理
七,mysql的配置优化(配置参数请看我其他文章或自行百度)
1)增大连接数
2) 增大内存
八,存储过程,触发器的使用
九,缓存的优化
主要体现在缓存失效会增加数据库压力(案例日活跃量大且在线时间长的)
解决方案:1)调整缓存失效策略让其分散,比如(3-6小时失效,缓存集群里的某个节点失效了则
立马更新并通知其他节点及时复制。或者夜间更新缓存(这里不讨论缓存做集群还是说只是服务器端做粘性备份)
十,服务器硬件优化
1 ) 基准测试查看