请教各位高手,我写的一段SQL语句单独执行和在存储过程中执行是,执行计划不一样,存储过程中不走索引,导致我的存储过程执行不符合系统设计要求,超时 ,请大侠门指点一下,我应该从什么地方着手解决这个问题。

解决方案 »

  1.   

    在存储过程的sql中加上hint比如你想让它走表a的索引a_idx,可以写成select /*+ index(a a_idx) */ columns from ...索引名可以不必写,系统会自动指引表a索引的其中一个
      

  2.   

    看看是不是索引限制了?有一下情况是不走索引的,除非采用2楼采用hint提示....
    1. 使用不等于操作符(<>、!=)
    2. 使用IS NULL 或IS NOT NULL
    3. 使用函数
    4. 比较不匹配的数据类型
      

  3.   

    这个可能与数据量有关,数据较少时,这样测试可就不走索引,ORACLE 执行查询时会对执行效率进行评估,看有没有必要走索引.