1、优化count()查询
count()聚合函数,以及如何优化使用了该函数的查询,很可能是mysql中最容易被误解的前10个话题之一
count() 是一个特殊的函数,有两种非常不同的作用。它可以统计某个列值的数量,也可以统计行数。
统计列值 要求列值是非空的。(不统计null,即null值计数为0)
count()的另一个用处是统计结果集的行数。当mysql确认括号的表达式值不可能为空时,实际上就是统计
行数。最简单的就是当我们使用count(*)的时候,这种情况下统配符*并不会像我们猜想的那样扩展成所有
的列,实际上,它会忽略所有的列而直接统计所有的行数。
假如在同一个查询中统计同一个列不同值得数量
select sum(if(color = 'blue', 1, 0)) as BLUE, sum(if(color = 'red', 1, 0)) as RED from items
select count(color= 'blue' or null) blue, count(color= 'red' or null) red, from items
简单的优化
更复杂的优化
count()都需要扫描大量的行(意味着要访问大量数据),才能获得准确的结果,因此很难优化,在MySQL层面还能做的只有索引覆盖扫描,如果还不够,就应该考虑修改应用的架构,考虑增加汇总表
2、优化关联查询
3、优化子查询
4、优化GROUP BY / DISTINCT
5、优化GROUP BY WITH ROLLUP
6、优化limit分页
在系统中进行分页操作的时候,通常会使用limit加上偏移量的方法实现,同时加上合适order by 子句,如果有对应的索引,通常效率会不错的;否则MySQL需要做大量的文件排序操作
7、优化SQL_CALC_FOUND_ROWS
8、优化union查询