简介
数据库优化的目的
数据库优化方面
慢日志分析
- SQL及索引优化
查看是否开启慢查日志
慢查日志的存储格式
- saklia数据库演示
慢查日志分析工具
mysqldumpslow:MySQL官方工具
- 使用:
查询使用方式
pt-query-digest
- 使用
发现分析“问题SQL”
- 发现
Rows examine:扫描行数
Rows send:发送行数
- 分析
优化方法
1.对Count()和Max()优化
- Max():通过添加索引
- Count()
- 注意:count(*)包含NULL ;count(列)不含NUL
结果:
2.对子查询的优化
- 例子:子查询改连接查询
子查询
连接查询:容易出现重复
通过distinct关键字去重
3.对group by查询的优化
- 优化前:用了临时表 文件排序 (不好)
- 优化后:若有其他过滤条件 也应放在子查询中,而非查询后再过滤
4.对limit查询的优化
- 优化1:用有索引的列或主键进行Order by操作
- 记录上次返回的主键,下次查询使用主键过滤。【注意:主键按顺序排序且无空缺】
避免数据量大时扫描过多记录
索引优化
选择索引列
- 通过查看唯一值判断离散程度:唯一值数量多,离散大
消除重复/冗余索引
- 第三方工具
删除不使用的索引
结构优化:表的拆分
选择合适数据类型
- int存储时间
看后缀:
FROM_UNIXTIME:INT时间戳转换成日期格式
UNIX_TIMESTAMP:日期格斯转换成时间戳 - bigint存储IP地址
表的范式化和反范式化
- 范式化
此表不符合第三范式:
存在问题:
- 范式化
- 反范式化
表的垂直拆分
- 例子
拆分后
表的水平拆分
- 方法
前后台分开:前台需要效率
配置优化
MySQL配置文件
- 常用参数
操作系统配置优化
第三方配置工具
硬件优化
如何选择CPU
磁盘IO