Mysql数据库优化(一)

时间:2021-09-24 07:10:10

数据库优化的目的:

  • 由于数据连接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.离散度大的字段放到联合索引的前面(唯一值越多,离散程度越好)