使用EXPLAIN进行分析
explain用来分析SELECT查询语句,开发人员可以通过分析Explain结果来优化查询语句。可以查询的比较重要的字段有:
- select_type:查询类型,有简单类型,联合查询,子查询等
- key:使用的索引
- rows:扫描的行数
优化数据访问
-
减少请求的数据量
只返回必要的列:最好不要使用SELECT*语句;
只返回必要的行:使用LIMIT语句来限制返回的数据
缓存重复查询的数据:使用缓存可以避免在数据库中进行查询,特别在要查询的数据经常被重复查询时,缓存带来的查询性能提升将会是非常明显的。 -
减少服务器端扫描的行数
最有效的方式是使用索引来覆盖查询。
重构查询方式
- 切分大查询
一个大查询如果一次性执行的话,可能一次锁住很多数据,占满整个事务日志,耗尽系统资源,阻塞很多小的但重要的查询。 - 分解大连接查询
将一个大连接查询分解成对每一个表进行一次单标查询,然后在应用程序中进行关联,优点:
让缓存更加高效。对于连接查询,如果其中一个表发生变化,那么整个查询缓存就无法使用。而分解后的多个查询,即使其中一个表发生变化,对其他表的查询缓存依然可以使用。
分解成多个单标查询,这些单表查询的缓存结果更可能被其他查询使用到,从而减少冗余记录的查询。
减少锁竞争
在应用层进行连接,可以更容易对数据库进行拆分&#