大多数情况下,oracle数据库内置的查询优化策略还是很成功的,但偶尔也有犯2的时候,即使有索引,也会做全表扫描,可以参考以下语句的写法,强制让select语句使用索引@H_301_2@
1@H_301_2@ CREATE@H_301_2@ OR@H_301_2@ REPLACE@H_301_2@ VIEW@H_301_2@ V_RES_CBA AS@H_301_2@
2@H_301_2@ SELECT@H_301_2@ /*@H_301_2@+INDEX(SEG IDX_T_RES_ALLOSEG_ALLOID)@H_301_2@*/@H_301_2@
3@H_301_2@ ALLO.ALLOID AS@H_301_2@ RESID,@H_301_2@ 4@H_301_2@ NULL@H_301_2@ AS@H_301_2@ AWB, 5@H_301_2@ ALLO.ALLOTMENT AS@H_301_2@ ALLO_ID,128)"> 6@H_301_2@ DAYS.FDATE +@H_301_2@ NVL(SEG.DAYSDISP,0@H_301_2@) AS@H_301_2@ FDATE,128)"> 7@H_301_2@ ALLO.SPECULD AS@H_301_2@ SPECULD
8@H_301_2@ FROM@H_301_2@ T_RES_ALLO ALLO,T_RES_ALLOSEG SEG,V_FDATE DAYS
@H_301_2@ 9@H_301_2@ WHERE@H_301_2@ ALLO.ALLOID =@H_301_2@ SEG.ALLOID
@H_301_2@10@H_301_2@ AND@H_301_2@ ((ALLO.ALLOIND =@H_301_2@ '@H_301_2@A@H_301_2@'@H_301_2@ AND@H_301_2@ ALLO.ALLO_DATE =@H_301_2@ DAYS.FDATE) OR@H_301_2@
11@H_301_2@ (ALLO.ALLOIND S@H_301_2@AND@H_301_2@
12@H_301_2@ NVL(ALLO.SDATE,ALLO.ALLO_DATE) =@H_301_2@ DAYS.FDATE))
13@H_301_2@ UNION@H_301_2@
14@H_301_2@ 15@H_301_2@ ALLO.ALLOID 16@H_301_2@ 17@H_301_2@ ALLO.ALLOTMENT 18@H_301_2@ DAYS.FDATE 19@H_301_2@ ALLO.SPECULD 20@H_301_2@ 21@H_301_2@ 22@H_301_2@ AND@H_301_2@ ALLO.ALLO_DATE IS@H_301_2@ NULL@H_301_2@
23@H_301_2@ AND@H_301_2@ ALLO.ALLOIND '@H_301_2@
24@H_301_2@ AND@H_301_2@ (DAYS.FDATE >=@H_301_2@ ALLO.SDATE AND@H_301_2@ DAYS.FDATE <=@H_301_2@ ALLO.EDATE 25@H_301_2@ INSTR(ALLO.WEEKDAY,DAYS.WEEKDAY) >@H_301_2@ 0@H_301_2@)
26@H_301_2@ AND@H_301_2@ NOT@H_301_2@ EXISTS@H_301_2@ (SELECT@H_301_2@ subQuery.ALLOID
@H_301_2@27@H_301_2@ from@H_301_2@ T_RES_ALLO subQuery
@H_301_2@28@H_301_2@ where@H_301_2@ subQuery.ALLO_DATE =@H_301_2@ DAYS.FDATE
@H_301_2@29@H_301_2@ and@H_301_2@ subQuery.ALLOTMENT =@H_301_2@ ALLO.ALLOTMENT)
@H_301_2@30@H_301_2@ ;
要点:
1、/*+INDEX(SEG IDX_T_RES_ALLOSEG_ALLOID)*/@H_301_2@这里的/*...*/中间不要有空格
作者:
菩提树下的杨过
出处: http://yjmyzz.cnblogs.com 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
出处: http://yjmyzz.cnblogs.com 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。