Oracle Spatial空间查询条件在where 条件中的执行顺序有关问题

Oracle Spatial空间查询条件在where 条件中的执行顺序问题
      说明一下:
      需要执行一个查询满足两个条件:条件一是用空间查询 sdo_widthin_distance 进行筛选,条件二是我自定义的函数fun_detect_pt_in_line。在执行查询时,条件一筛选出来的记录为3条,但是通过在pl /sql developer里进行单步执行,发现在用条件二进行筛选时,调用自定义函数的次数远远不止3次。
       代码如下:
       

       SELECT COUNT(*) 
       INTO ptnum
       FROM tb_spatial c
       WHERE 
       fun_detect_pt_in_line(x,y) =1
       AND
      SDO_WITHIN_DISTANCE(c.shape,v_geopolyline,'distance=100,unit=m')='TRUE';
     

      条件一与条件二互换位置也一样。
     奇怪的是,代码分成两层之后,还是会出现这个问题
    代码如下:
     

    SELECT COUNT(*) 
    INTO ptnum
    FROM
    (
    SELECT x,y
    FROM tb_spatial c
    WHERE SDO_WITHIN_DISTANCE(c.shape,v_geopolyline,'distance=100,unit=m')='TRUE'
    )
    WHERE fun_detect_pt_in_line(x,y) =1;

    说明:
     通过将条件一由空间函数 SDO_WITHIN_DISTANCE 替换为普通的查询条件如  where id<4;时 单步执行时正常了,调用自定义函数的次数与内层的记录个数一致了。
    我想问在利用 oracle spatial的空间函数作为条件查询时,为什么会有“不正常”的举动呢?
   
------解决思路----------------------
查看执行计划,看看他具体的执行过程吧
我感觉应该是oracle自动对你的语句进行优化,结果优化后还不如不优化呢,呵呵

------解决思路----------------------
这里有个逻辑问题,fun_detect_pt_in_line函数是用来条件中,而不是用在结果中,调用次数和查询结果记录数没有必然联系

当使用id<4,cbo执行的时候先走id的条件,再走fun_detect_pt_in_line条件,而后者并没有过滤作用,执行次数和结果数才会一样

为什么要关心fun_detect_pt_in_line的执行次数呢
------解决思路----------------------
楼主百度下Oracle Hint,也许有你想要的答案
------解决思路----------------------
1. 是否执行次数越多效率越低,是相对的,也许sdo_within_distance更会拉低效率,看cbo怎么认定
3. 在cbo下没有办法

建议让系统自己来判断,如果参数'distance=100,unit=m'是固定的,可以建个函数索引SDO_WITHIN_DISTANCE(c.shape,v_geopolyline,'distance=100,unit=m')