HINT 不生效?

今天有个徒弟找我看一条SQL

SELECT /*+  use_hash(REGION,MPI) */
    REGION.REGION_CODE,
    REGION.REGION_NAME,
    MPI.YEARS,
    SUM(MPI.MPI_COUNT) SUM_MPI_COUNT
  FROM
    (SELECT /*+ index_ffs(T_REGION T_REGION_INDEX) */ REGION_CODE, REGION_NAME FROM T_REGION 
      where REGION_CODE  is not null
      and REGION_NAME is not null
    ) REGION
  LEFT JOIN
    ( SELECT /*+ index_ffs(MPI_PERSON_INDEX MPI_PERSON_INDEX_INDEX) */ AR_CD,
      TO_CHAR(CREATETIME,'YYYY') YEARS,
      COUNT(1) AS MPI_COUNT
    FROM MPI_PERSON_INDEX
    GROUP BY AR_CD,
      TO_CHAR(CREATETIME,'YYYY')
    ) MPI
  ON REGION.REGION_CODE=MPI.AR_CD
  GROUP BY REGION.REGION_CODE,
    REGION.REGION_NAME,
    MPI.YEARS

加了hint use_hash不生效, 然后让他生成10053 trace,结果trace里面没有 use_hash 的hint ...,但是有 index_ffs 的hint 太奇怪了,于是把sql改了

SELECT /*+ use_hash(region,mpi) */
 REGION.REGION_CODE,
 REGION.REGION_NAME,
 MPI.YEARS,
 SUM(MPI.MPI_COUNT) SUM_MPI_COUNT
  FROM (SELECT /*+ index_ffs(T_REGION T_REGION_INDEX) */
         REGION_CODE, REGION_NAME
          FROM T_REGION
         where REGION_CODE is not null
           and REGION_NAME is not null) REGION,
       (SELECT /*+ index_ffs(MPI_PERSON_INDEX MPI_PERSON_INDEX_INDEX) */
         AR_CD, TO_CHAR(CREATETIME, 'YYYY') YEARS, COUNT(1) AS MPI_COUNT
          FROM MPI_PERSON_INDEX
         GROUP BY AR_CD, TO_CHAR(CREATETIME, 'YYYY')) MPI
 where REGION.REGION_CODE = MPI.AR_CD(+)
 GROUP BY REGION.REGION_CODE, REGION.REGION_NAME, MPI.YEARS


改成 + 方式居然hint生效了, 因为无法连接他电脑,就没有深入研究下去了,先记录一下。



评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值