ind_last_name与app_last_name有索引吗但用了函数根本起不同作用

解决方案 »

  1.   

    优化1.如果无所谓记录重复,或者两个集合不会有重复,那么将union改为union all,因为union要去除两个集合中重复的部分,所以影响效率严重。2.将like部分改为 substr(lower(rtrim(App_Last_Name)),1,1)='s'试试。
      

  2.   

    where条件的顺序调整一下,把条件越严格的写在后面下面的我也没试过,你试一试吧。
    有索引的话,把(rtrim(IND_Last_Name)) like 's%' 写成IND_Last_Name>='s' and IND_Last_Name<='s'把lower(rtrim(App_Last_Name)) like 'S%'写成(App_Last_Name>='s' and App_Last_Name<='s') or App_Last_Name>='S' and App_Last_Name<='S'
      

  3.   

    lower(rtrim(IND_Last_Name)) like 's%' 
    改为
    ( ind_last_name like 'S%' or ind_last_name like 's%')其余类似
      

  4.   

    3.5 min looks ok.  The key point is whether the USER happy with it or not.  If user does not complain, no need for any tuning.
      

  5.   

    to luckysxn(风花雪)
    那又如何建立函数索引呢?谢谢
      

  6.   

    我觉得:
    1、rtrim 和 lower 函数会使索引失效,有些字段可以使用Varchar2类型替换char类型,这样就可以去掉rtrim了2、可以加大临时表空间或在init.ora中把参数sort_area_size和
    sort_area_retained_size 加大,因为你查询中触发排序了