【发布时间】:2017-06-23 01:45:42
【问题描述】:
我已经在名为 MyTable 的表上有一个名为 idx_MyTableColumn 的索引。 我跑了一个查询
select * from MyTable where MyTableColumn = 'AAA';
然后,我尝试运行上述查询的解释计划,计划告诉我查询的成本是 65701。不需要优化。 解释计划如下:
我在 MyTable 表上删除了索引 idx_MyTableColumn。
然后,我在 MyTable 上放置了一个名为 idx_UpperMyTableColumn 的基于函数的索引
create index idx_UpperMyTableColumn on MyTable( upper(MyTableColumn) );
然后,我再次尝试为新创建的基于函数的索引查询运行解释计划,这次总成本为 21634。 解释计划如下:
看到这个我很惊讶。基于函数的索引比普通的基于列的索引工作得更快吗?还是我遗漏了什么?
【问题讨论】:
-
请发布两个解释计划。
-
两个索引都是新的,列基索引是否是前段时间创建的?检查 [link(blogs.oracle.com/sysdba/entry/when_to_rebuild_index) 关于重建索引。
标签: oracle performance indexing query-optimization