oracle索引问题

liu3617 2014-12-29 05:01:43
select distinct ab.other_tuangou,
ab.other_seller
from am_log_xx_xxx ab
where ab.inout = 'IN'
and ab.we_seller = 141508165094900002
AND ab.log_datetime >=
to_date('2013-12-01', 'YYYY-MM-DD')
AND ab.log_datetime <
to_date('2015-12-01', 'YYYY-MM-DD') + 1

create index IDX_AB_xx on am_log_xx_xxx(INOUT, OTHER_SELLER, WE_TUANGOU, WE_SELLER, LOG_DATETIME);
先建了一个组合索引,但是组合索引里面没加OTHER_TUANGOU,所以查询出来1.2s左右
但是我把上句索引改成下面这条,在组合索引里面加了OTHER_TUANGOU,查询出来0.2s
create index IDX_AB_xx on am_log_xx_xxx(INOUT, OTHER_SELLER, WE_TUANGOU, OTHER_TUANGOU, WE_SELLER, LOG_DATETIME);

复合索引有两个重要原则需要把握: 前缀性和可选性,但是不知道加了OTHER_TUANGOU为什么会快这么多???
谁给解释下??
...全文
255 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhk383501372 2014-12-30
  • 打赏
  • 举报
回复
你确定索引有用?LOG_DATETIME能否建单列索引? (<=改写 成<, to_date('2015-12-01', 'YYYY-MM-DD') + 1改下成to_date('2015-12-02', 'YYYY-MM-DD') 。 ab.inout这个栏位不同的值多不多?多的话不要放在索引前列
bw555 2014-12-29
  • 打赏
  • 举报
回复
差异应该是在执行distinct去重的时候是否可以利用索引 你可以把两种方式的执行计划都导出来,对比下,差异在哪一目了然
Tiger_Zhao 2014-12-29
  • 打赏
  • 举报
回复
索引是在内存中的。加了 OTHER_TUANGOU 后,SELECT 需要的字段全在索引中,直接读取内存可得;比原先要读取硬盘,从记录中取字段值当然快多了。

17,090

社区成员

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

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