test_A(
id1 number,
id2 number,
id3 number,
name varchar2(10),
create_dt date
)
我有两个指标一个综合指数indx1
上(id1,id2)
和indx2(id3)
。现在,当我查询此表作为test_A
select * from test_A where id2=123 and
create_dt=(select max(create_dt) from test_A where test_A.id2=id2);
我跑了解释计划,这上面的SQL,它是使用“索引跳跃式扫描”。如果我在create_dt
上创建了另一个索引,那么它使用索引快速全面扫描以及全部成本和%cpu显示的比带索引跳过扫描的计划更高。在create_dt
上创建索引后,它也使用索引范围扫描。
我不能得出结论应该可以吗?我是否需要在create_dt
上创建另一个索引或索引跳过扫描是否良好?我相信索引跳过是Oracle运行多索引范围扫描的一项功能吗?
感谢上述溶液。我在索引中创建了合成索引,这些索引在解释计划中降低了成本。我还有一个问题,假设我在(id1,id2)上的另一个表上创建了唯一约束,并且我们是否需要在外部创建索引或者是否使用唯一约束来处理索引。我已经在很多论坛上看到了这个说法,有人说它会照顾Index创建索引的一些需要,不能就此作出结论。请让我知道你是否有这方面的任何信息。 – user2824874
只需亲自尝试一下。看到这个链接:http://www.sqlfiddle.com/#!2/180be/1那里有三个不同的表格,第一个没有索引,第二个索引用'create index'创建,第三个用'约束..唯一'在表格定义内。运行附加的查询,然后单击“查看执行计划”链接并比较个人解释计划,以查看他们是否使用索引。 – krokodilko
上面的链接正是我需要的!谢谢! –