补充:该查询是在存储过程中实现的,我第一次调用该存储过程,需要5-8秒时间,但第二次,同样的调用(没有作任何修改),就只需要0.4秒了,然后关闭sql*plus,在打开,执行调用程序,又是5-8秒。也就是只要是新的session,第一次执行就很慢,以后就快了。这是为什么?(我的应用中都会在新的连接下执行该存储过程,那不是每次执行都很慢?)help me!!!

解决方案 »

  1.   

    1.增加索引將提高你的查詢速率 
    建議建立索引值欄位:StyleName,tops,lows,
    參考索引原理:
    http://www.cnoug.org/viewthread.php?tid=37971
    2.第一次5-8秒,第二次0.4秒
    建議看oracle結果原理的文章,主要涉及oracle的共享池中的最近最新原則
      

  2.   

    Tops和LowS上建个索引试试,不要单独在一个个列上建。另外,用like不太好,看能否用别的代替。不行可以试试substr新的sesssion慢是因为第二次跑的时候Select语句不用再重新解析了。
      

  3.   

    to Alkeen() 用Like会影响速度,但用函数应该更加影响速度吧
    where substr(stylename,1,4)='普通'     这样要比like快?
      

  4.   

    如果用like 来查询,那么在其列上的索引将起不到查询快的作用如果查询结果的记录行数小于所有记录的行数的20%,那么也将起不到好的作用建议这样:select * from 
    (select * from dvfirstreturn where 
    StyleName TopS >70 and LowS <90 and like '普通%' order by regdate desc)
     where rownum >=1 and rownum<=20在tops,lows列上建索引
      

  5.   

    to  yown(yong)
    select * from 
    (select * from dvfirstreturn where 
    StyleName TopS >70 and LowS <90 and like '普通%' order by regdate desc)
     where rownum >=1 and rownum<=20
    其中"StyleName TopS >70 and LowS <90 and like '普通%'"写对吗??
    这样写有什么不一样呢?效率高在哪儿?我的查询要求是模糊查询,要高效应该用什么方法呢?