trunc日期会影响索引的使用吗?

billlyh 2012-11-02 09:38:38
在做ebs11.0的二次开发时,碰到这个问题,
我做了一下测试,发现并没有影响
例:
select *
from inv.mtl_material_transactions t
where t.organization_id = 4
--and t.transaction_date < trunc(to_date('&f_date', 'yymmdd
-------使用索引是MTL_MATERIAL_TRANSACTIONS_N5,列是ORGANIZATION_ID, TRANSACTION_DATE

select *
from inv.mtl_material_transactions t
where t.organization_id = 4
and trunc(t.transaction_date)<to_date('&f_date', 'yymmdd') ---
-------使用索引是MTL_MATERIAL_TRANSACTIONS_N5,列是ORGANIZATION_ID, TRANSACTION_DATE

select *
from inv.mtl_material_transactions t
where t.organization_id = 4
and t.transaction_date < trunc(to_date('&f_date', 'yymmdd'))
-------使用索引是MTL_MATERIAL_TRANSACTIONS_N5,列是ORGANIZATION_ID, TRANSACTION_DATE

请兄弟们帮忙分析一下
...全文
624 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
buryMyLove 2012-12-24
  • 打赏
  • 举报
回复
我想回复你,但是CSDN一直提示不能提交非法数据,我就服了…… 对于组合索引,你organization_id放在前面,只要查询条件里面有organization_id=4,就会走这个索引,至于后面的字段用没用到,刚看这个看不出来。 你把索引里面的两个字段顺序换一下,然后再看下执行计划,就看出区别来了
yuyeyi 2012-11-30
  • 打赏
  • 举报
回复
看下组合索引走索引的方式, 记得是这样的: 1.如果按照索引字段的顺序,那么走索引。 2.如果组合索引的所有字段都走了,那么也走索引。 3.如果中第n个字段开始,而没有前面字段则不走索引
billlyh 2012-11-05
  • 打赏
  • 举报
回复
引用 1 楼 zhangandli 的回复:
不會影響
我做过测试,影响的 select * from inv.mtl_material_transactions t where t.organization_id = 4 and trunc(t.transaction_date)<to_date('&f_date', 'yymmdd') --- -------使用索引是MTL_MATERIAL_TRANSACTIONS_N5,列是ORGANIZATION_ID, TRANSACTION_DATE --不能在列本身上做运算,但这里是组合索引,查询条件里有organization_id,所以不管日期有没有TRUNC,都会走这个索引。 --如果条件里去掉organization_id ,用下面的SQL查询就是全表扫描了 ---- where t.transaction_date < trunc(to_date('&f_date', 'yymmdd')) --或者 where trunc(t.transaction_date)<to_date('&f_date', 'yymmdd')
人生无悔 2012-11-02
  • 打赏
  • 举报
回复
不會影響

17,089

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧