数据库优化的目的:
- 由于数据连接timeout产生页面5xx错误
- 由于慢查询造成页面无法加载
- 由于阻塞造成数据无法提交
一、sql语句优化
慢查询日志:
1)查看mysql是否开启慢查询日志
show variables like 'slow_query_log';
2)设置没有索引的记录到慢查询日志
set global log_queries_not_using_indexes=on;
3)查看超过多长时间的sql进行记录到慢查询日志
show variables like 'long_query_time';
4)开启慢查询日志
set global slow_query_log=on;
使用pt-query-digest工具来分析慢查询
举例:
1.max()聚集函数的优化:在该字段上加上索引
2.count(year=2006 or null):解释:
因为 当 release_year不是 2006时 ,release_year=’2006’ 结果false 不是 NULL,
Count在 值是NULL是 不统计数, 至于加上or NULL , 很像其他编程里的or运算符,第一个表达式是true就是不执行or后面的表达式,第一个表达式是false 执行or后面的表达式 。当release_year不为2006时release_year = ‘2006’ or NULL 的结果是NULL,Count才不会统计上这条记录数
3.子查询优化
通常情况下,子查询优化为join查询,但在优化时要注意关联键是否有一对多的关系(可能会产生重复数据)—->使用distinct关键字去重
二、索引优化
合适的列上创建索引:
1.在where从句中,group by从句,order by从句,on从句中出现的列
2.索引字段越小越好
3.离散度大的字段放到联合索引的前面(唯一值越多,离散程度越好)