Mysql性能优化
msql要点
- 定位查询慢查询
- 使用show status(例如如下)
- show variables like ‘long_query_time’(查看慢查询的默认时间)
- show status like ‘slow_queries’ (获得慢查询数量)
- set long_query_time = 0.001 (修改慢查询的时间)
- 通过my.ini文件配置慢查询日志
我们对sql进行调优。必须需要定位到慢查询。知道那个sql慢查询,才能针对优化。添加索引或者重写sql
数据库如何调优
数据库设计规范,遵循3F
- 1F 原子约束 (例如name sex都是不可再分的,address是可以再分成省市区的代表可分)
- 2F 保证唯一性 例如主键,订单编号
- 3F 不要有亢余数据 (通过id相连)
- 不一定完全遵循(例如商品每个规格库存)
数据库表优化
- 数据库分表分库(取模分表,水平分割,一张表数据多均匀拆分(取模1%3),垂直分割 按模块拆分多个小项目,不同数据库)
- 分表后缺点
- 分页查询
- 查询瘦限制 例如查询性别为男的用户。需要三张表一起查
- 添加索引(减少全表索引,普通索引,主键索引,唯一,全文)
sql语句调优
- 原理 (生成索引文件)
- b-tree树算法 折半查找(优化全表扫描)
在数据库查询过程中,如果没有索引的话。例如有一万条数据。需要查询第5000条数据。数据库是从1开始查询。查询完后开始查询2 。全表扫码
如果添加了索引后。如果有一万条数据。数据库他是先折半查找。先查询第5000条。如果没有查询到到则开始查询2500 跟7500 。b-tree树查询。快速的缩减了查询的次数快速查找到数据
- 实现2的N次方查询
- 索引的优缺电
- 优点:增加查询速度
- 缺点:新增,删除慢,因为新增了索引文件
- 怎么新增索引
- 查询次数比较多并不经常修改的字段
- 注意事项
- 组合索引单独使用第一个条件可以进行索引查询或者两个一起使用。单独使用第二个条件无法进行索引查询
- like查询使用索引查询需要去除第一个%
- 使用or查询都需要加上索引查询才生效
- 优化技巧
- group by默认分组后还会排序,增加性能去除排序 order by null
- 尽量避免子查询,使用join来查询
- 尽量避免全表扫描
- 避免使用>=做判断 两次全表扫描
- 查询量大需要使用分表,缓存,分页
- 读写分离(提供iu性能)
- 配置最大链接数
- mysql服务器升级
- 及时清理碎片化(myisam)