MySQL查询性能优化(七)- 优化特定类型的查询

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查询

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值