两个表左联查询,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的字段.
有没有高手指点一下.

解决方案 »

  1.   

    纠正一下,两个表是inner join 不是left joinyueliangdao0608 详细说一下,
    最简单的形式是什么意思, 像这种内联的用什么形式来做
    我曾经考虑过把数据加到单表里,用来提供查询,测试确实快很多,只要有联接,加order 用count时性能显著下降.
      

  2.   


    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
    试试
      

  3.   

    比如这样:select * from a inner join (select * from b where ...) as t on a.... = t....;替换成:
    select * from a inner join b on a.... = b.... where ...
      

  4.   

    我就是用这种select * from a inner join b形成视图的
    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个字段.
      

  5.   

    因为你的COUNT里面用到了distinct!!1、给distinct 的列加适当的索引,至于怎么加,看看索引optimize 那部分 group by 的优化!
    2、UNION ALL 尽量不要用!!!对表的扫描次数尽量要少!!
      

  6.   

    贴一下的记录,能否直接在VIEW中处理
      

  7.   


    distinct 的列加索引了,但没什么效果, a表是130多万,b表数据不多,
    另外a表100多字段,b表50多字段.----索引optimize 那部分 group by 的优化--------是什么意思,是建索引的参数吗,我上网查了optimize ,也查不到啊.
    我也觉得不能用union.贴什么记录??
      

  8.   

    你将内容修改一下嘛,只要KEY字段是正确的。
      

  9.   

    个人感觉,楼主的处理应该在 view1 中处理。
      

  10.   

    主要是view1的问题
    你得把视图的定义写出来