欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

执行计划中未运用索引! 受min函数影响

更新时间: 2014-01-05 02:10:56 责任编辑: Author_N1

 

执行计划中未使用索引! 受min函数影响?
我的sql语句如下:
SELECT ATTID, VALUE FROM REDLINE_MSATTRIBUTE 
WHERE(ATTID, CHANGE_RELEASE_DATE) 
IN (SELECT ATTID, MIN(CHANGE_RELEASE_DATE) FROM REDLINE_MSATTRIBUTE WHERE CLASS = 9000 AND OBJECT_ID = 32718015 
AND CHANGE_RELEASE_DATE >  (SELECT RELEASE_DATE FROM CHANGE WHERE ID = 50839166) 
AND ATTID IN (...此处省略...) GROUP BY ATTID)
AND CLASS = 9000 AND OBJECT_ID = 32718015 AND OLD_VALUE='Y' ORDER BY ATTID, VALUE;

给表建了如下的索引:
 CREATE INDEX REDLINE_MSATTRIBUTE_AINDEX ON REDLINE_MSATTRIBUTE
  (
    "ATTID",
    "CHANGE_RELEASE_DATE",
    "CLASS",
    "OBJECT_ID",
    "OLD_VALUE"
  );
但是在执行sql语句的时候,执行计划中并没有使用此索引,有些资料中提到如果索引字段中使用了函数,那么索引不会被使用。那么是不是sql语句中的MIN(CHANGE_RELEASE_DATE)导致改索引不被使用呢?

有没有什么办法保证改索引会被使用,或者有什么是发方法替代min函数?

--参考方法--
加索引前请重构语句,redline_msattribute这张表一次扫描就可以得出结果了,你的写法多扫描了一次。
--参考方法--
没用索引的原因,不确定,因为不是很了解你的数据环境。
另外,min函数的使用,不影响索引的使用。
如果需要详细讨论,可以和我联系。
希望二楼的朋友能说下,如何重构?如何一次扫描能完成?
--参考方法--
如果表不是太大的话Oracle有可能认为全表扫描比索引更快从而不用索引
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:10:56
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/6653/
本文WWW.DOC100.NET DOC100.NET版权所有。