我尝试把它改成这样 SELECT * , sum(if(c='c',1,0)) as v FROM `a` where c='a' group by id having v=0 好像能够使用索引了。但是还是有use temporary,using filesort 不知这个语句在大表上工作起来效率如何?
那试试这样 SELECT * , sum(if(c='c',1,0)) as v, sum(if(c='a',1,0)) as w FROM `a` where c in ('a','c') group by id having v=0 and w>0这样在where语句部分是使用了c上的索引的,速度会快一些。只使用c='a' 不行,因为‘c’没有统计到。
SELECT * , sum(if(c='c',1,0)) as v
FROM `a` where c='a'
group by id
having v=0
好像能够使用索引了。但是还是有use temporary,using filesort
不知这个语句在大表上工作起来效率如何?
SELECT * , sum(if(c='c',1,0)) as v, sum(if(c='a',1,0)) as w
FROM `a`
where c in ('a','c')
group by id
having v=0 and w>0这样在where语句部分是使用了c上的索引的,速度会快一些。只使用c='a' 不行,因为‘c’没有统计到。
好像是可以了,有时间仔细研究一下。
另外好像手册对having的用法介绍很简单,你这种用法我还是第一次看到,能否给推荐一个这种用法的详细介绍?
一般的sql书都会介绍到。
网上也能找到一些文章的。