我建了一个视图,但现在查询起来速度特别慢,不知道是怎么回事,建立视图的代码如下,请大家帮忙看一下,多谢了!CREATE OR REPLACE VIEW OPERATOR.VIEW_CNGP_SMS
    (RESULT,COMPANY,DESTTERMID,FEECODE,FEETYPE,MSGCONTENT,MSGLEN,SAVETIME,
    SERVICEID,SMID,SRCTERMID,STATUS)
AS
SELECT  
    a.RESULT, 
    b.COMPANY, 
    b.DESTTERMID, 
    b.FEECODE, 
    b.FEETYPE, 
    b.MSGCONTENT, 
    b.MSGLEN, 
    b.SAVETIME, 
    b.SERVICEID, 
    b.SMID, 
    b.SRCTERMID, 
    b.STATUS 
    FROM OPERATOR.CNGP_SEND_RESULT a , OPERATOR.CNGP_SMS b    WHERE ( 
    ( a.DESTTERMID = b.desttermid ) 
    and 
    (a.msgid = b.smid)
    and 
    (a.RESULT = 'DELIVRD')
    ) 现在select * from view_cngp_sms的速度非常慢!其实现在视图中选不出数据,但速度特别慢,不知道是怎么回事,请大家帮忙看看,拜托了!

解决方案 »

  1.   

    其实这条SQL语句是没有任何可以优化的,可以试着在表上建立索引,提高查询速度
      

  2.   

    建议若a表为主表,加上
    WHERE ( 
        ( a.DESTTERMID = b.desttermid (+)) 
        and 
        (a.msgid = b.smid (+))
        and 
        (a.RESULT = 'DELIVRD')
        )
      

  3.   

    0.如果能用上索引是最好了
    1.a表和b表哪个表的记录数多,记录数多的表要更靠近 from
    2.能过滤最大数的条件要放在最后。
    因为oracle 连接表时会从 from 子句按从右至左的方向