两个表左联查询,a left join b 连接字段都加索引了,其中a表有130万数据,形成一个视图view1
select count(distinct b1) b1 ,count(distinct b2) b2 ...... count(distinct b50) b50 from view1
执行速度很慢,有没什么办法加快其速度,
需求是对视图view1分页查询前,对当前条件的数据的b表字段进行预查询,用来隐藏count(distinct B表.fieldName) <=1的字段.
有没有高手指点一下.
select count(distinct b1) b1 ,count(distinct b2) b2 ...... count(distinct b50) b50 from view1
执行速度很慢,有没什么办法加快其速度,
需求是对视图view1分页查询前,对当前条件的数据的b表字段进行预查询,用来隐藏count(distinct B表.fieldName) <=1的字段.
有没有高手指点一下.
最简单的形式是什么意思, 像这种内联的用什么形式来做
我曾经考虑过把数据加到单表里,用来提供查询,测试确实快很多,只要有联接,加order 用count时性能显著下降.
SELECT BZ,COUNT(*) FROM (
SELECT B1,'B1'AS BZ FROM VIWE1 GROUP BY B1
UNION
SELECT B2,'B2' AS BZ FROM VIWE1 GROUP BY B2
UNION
SELECT B3,'B3' AS BZ FROM VIWE1 GROUP BY B3
UNION
...
SELECT B50,'B50' FROM VIWE1 GROUP BY B50) aa GROUP BY BZ
试试
select * from a inner join b on a.... = b.... where ...
count性能显著下降.
这个语句就不行select count(distinct b1) b1 ,count(distinct b2) b2 ...... count(distinct b50) b50 from view1.
我查网上,有的说要分表.以后a表肯定会达到300-400万,可能会更多.
我试了,比select count(distinct b1) b1 ,count(distinct b2) b2 ...... count(distinct b50) b50 from view1.慢的更多
多一个字段会慢2-3秒,我要统计50个字段.
2、UNION ALL 尽量不要用!!!对表的扫描次数尽量要少!!
distinct 的列加索引了,但没什么效果, a表是130多万,b表数据不多,
另外a表100多字段,b表50多字段.----索引optimize 那部分 group by 的优化--------是什么意思,是建索引的参数吗,我上网查了optimize ,也查不到啊.
我也觉得不能用union.贴什么记录??
你得把视图的定义写出来