数据库优化的目的:
1.避免出现页面访问错误
- 由于数据库连接timeout产生页面5xx错误
- 由于慢查询造成页面无法加载
- 由于阻塞造成数据无法提交
2.增加数据库的稳定性
- 很多数据库问题都是由于低效的查询引起的
3.优化用户体验
- 流畅页面的访问速度
- 良好的网站功能体验
可以从几个方面进行数据库优化:
SQL语句优化:
1.如何发现有问题的SQL?
使用MySQL慢查日志对有效率问题的SQL进行监控
慢查日志的分析工具-mysqldumpslow
慢查日志的分析工具-pt-query-digest(信息比较完整,推荐学习)
有问题的SQL:
- 查询次数多且每次查询占用时间长的SQL
- IO大的SQL
- 未命中索引的SQL
SQL语句优化:
通过explain查询和分析SQL的执行计划
Count()和Max()的优化
子查询的优化
通常情况下,需要把子查询优化为join查询,但在优化时要注意关联键是否有一对多的关系,要注意重复数据。(用distinct消除)group by的优化
SQL句子优化过程示例:(查询每个演员演了多少次电影)
(1)优化前,一般的group by查询
select actor.first_name,actor.last_name,count(*) from sakila.film_actor inner join sakila.actor using(actor_id) group by film_actor.actor_id;(2)优化group by后
select actor.first_name,actor.last_name,c.cnt from sakila.film_actor inner join (select actor_id,count(*) as cnt from sakila.film_actor group by actor_id) as c us