我有一个存储过程,接受6个参数。当部署在实际应用中,我在通过该过程的调用日志(存储过程开始和结束时会插入日志)观察,该存储过程的平均执行时间需要8秒。但是我将该存储过程单独拿出来执行,同样的参数执行了3次后,大约只需0.6秒。可见对于同样参数oracle会优化执行性能,无需多次解析。虽然我的存储过程逻辑基本相同,但每次接受参数不同,一天大约会被执行上千次,但从结果来看这上千次执行每次都好像都是第一次执行,效率很低,完全没有利用到之前的执行结果。不知道有没有办法可以优化?

解决方案 »

  1.   

    过程只是个壳,参数传递到存储过程内部后,SQL的解析才是关键而软解析SQL的速度很快,应解析就是每次去解析,估计和你存储过程里的SQL代码写法有关系
      

  2.   


    存储过程中默认都是形参吧。例如in_parameter是输入参数,那么我select 1 into temp from table where parameter=in_parameter这种写法应该没有问题吧?
      

  3.   

    假设我传入参数是in_parameter-in_parameter6,我存储过程里面都是不同的查询语句,例如select 1 into temp1 from table1 where para1=in_parameter and 其他条件
    select 2 into temp2 from table2 where para2=in_parameter2 and 其他条件
    select 3 into temp3 from table3 where para3=in_parameter3 and 其他条件
    select 4 into temp4 from table4 where para4=in_parameter4 and 其他条件
    select 5 into temp5 from table5 where para5=in_parameter5 and 其他条件
    select 6 into temp6 from table6 where para6=in_parameter6 and 其他条件
    像这样一个存储过程用不同参数组合进行多次查询,是软解析还是硬解析呢?效率能提升嘛?
      

  4.   

    不同的参数可能导致会走不同的计划类似select 1 into temp from table where parameter=in_parameter可以用绑定参数的方式
    来处理 using :paramer_name