SQL语句改成这样试一下:select sun(a.XXX * B.XXX)
from D_KHXX d,a,b,c
where c.客户记录号 = d.客户记录号 and 
      d.标志  = 'P' and
      a.XXX = '参数' and 
      a.XXX = b.XXX  and
      a.XXX = c.XXX

解决方案 »

  1.   

    select sun(a.XXX * B.XXX)
    from D_KHXX d,a,b,c
    where d.标志  = 'P' and
          d.客户记录号 = c.客户记录号 and       
          a.XXX = '参数' and 
          a.XXX = b.XXX  and
          a.XXX = c.XXX
      

  2.   

    select count(1) from D_KHXX  where d.标志  = 'P' ; 返回192101(19万)条 !! 如果把where d.标志  = 'P' 放在最前面,d表满足的记录有19万条。
    如果把a.XXX = '参数' 放在最前面,a表满足的可能只有2万条。我的思路是先计算a.XXX = '参数',符合该条件的记录少,然后再与大记录表D_KHXX关联。 这两种的方式本质区别是什么? 有什么直接的性能影响??
      

  3.   

    客户信息表D_KHXX(客户记录号,标志,.........),该表有90列?你不觉得这样的表有问题吗?创建视图是不会提高你的效率的,视图只是定义在数据库总的sql而已。最根本的还是需要优化你的sql。你能确定的index都用上了吗?还有你可以考虑把大表作为驱动表。
      

  4.   

    这样改试试:
    select sun(a.XXX * B.XXX)
    from a,b,c,D_KHXX d
    where a.XXX = b.XXX  and
          b.XXX = c.XXX  and     
    a.XXX = '参数' and 
          c.客户记录号 = d.客户记录号 and 
          d.标志  = 'P'
    先从关联的表里缩小查找范围再查找需要的数据。
    考虑对A表与B表关联的字段建索引,可以有效的提高查询速度!
      

  5.   

    我所说的客户信息表D_KHXX(客户记录号,标志,.........),该表有94列,目前有201998条记录是千真万确!!!!
      
      a表和b表关联的复合primary key,所以应该不用建索引吧 ? 
      
      如果先进行关联的话,数据量也很大啊。
      
    可不可以先用参数条件减少记录数,再减少表之间的关联??如:
    where a.xxx = '参数' and 
          a.xxx = b.xxx  and 
          b.xxx = c.xxxx and 
          c.xxx = d.xxx  and 
          d.标志 = 'P'  现在查询慢的主要原因是d表的庞大的记录数和字段数(虽然我的查询中只需要两列而已).
      把大表d_khxx作为驱动表?? 20万条记录啊,为什么呢?