11种SQL中索引未使用的情况

发表于:2016-10-27 09:53

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:炼数成金    来源:51Testing软件测试网采编

  将SQL语句由开放区间扫描(>=),修改为封闭区间(betweenxxxandmax_value)。使得数据在索引局部顺序是“对的”。如果采用这种方式仍然不走索引扫描,还可以进一步细化分段或者采用“逐条提取+批绑定”的方法。
  9.建立组合索引,但查询谓词并未使用组合索引的第一列,此处有一个INDEXSKIPSCAN概念,
  10、like'%liu'百分号在前请输入标题
  11,notin,notexist
  可以尝试把notin或者notexsts改成左连接的方式(前提是有子查询,并且子查询有where条件)。
  例如:
SELECT
/*+INDEX(ICIRCLEICONMAST_IX1)*/
I.ICONNO,
I.CIRCLEID,
I.FILEPATH,
I.REGDT,
I.FILEPATH||'/'||I.FILENAMEIMGNAME,
I.FILEPATH||'/'||'th_160_'||I.FILENAMESMALLIMGNAME,
I.MEMBERID,
I.ADMCHKSTATUS,
I.ADMCHKORIGINALSTATUS,
ROWNUMRN
FROMCIRCLEICONMASTI
WHEREI.REGDTBETWEENTO_DATE('20120619','YYYYMMDD')-10000AND
TO_DATE('20120621','YYYYMMDD')
ANDNOTEXISTS(
SELECTC.VALIDFLG
FROMCIRCLEMASTC
WHEREC.VALIDFLGIN('N','F')
ANDI.CIRCLEID=C.CIRCLEID)
ANDI.ADMCHK='N'
  改成左连接:
SELECT
/*+INDEX(ICIRCLEICONMAST_IX1)*/
I.ICONNO,
I.CIRCLEID,
I.FILEPATH,
I.REGDT,
I.FILEPATH||'/'||I.FILENAMEIMGNAME,
I.FILEPATH||'/'||'th_160_'||I.FILENAMESMALLIMGNAME,
I.MEMBERID,
I.ADMCHKSTATUS,
I.ADMCHKORIGINALSTATUS,
ROWNUMRN
FROMCIRCLEICONMASTI,CIRCLEMASTC
WHEREI.REGDTBETWEENTO_DATE('20110620','YYYYMMDD')AND
TO_DATE('20120621','YYYYMMDD')+1
ANDC.VALIDFLGNOTIN('N','F')
ANDI.CIRCLEID=C.CIRCLEID
ANDI.ADMCHK='N'
  总结:oracle中有很多情况会导致index失效,并且走全表扫描的代价是相当大的,所以在写sql的时候一定要注意这个会使索引失效的情况,养成良好的习惯。
22/2<12
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号