添加索引会降低执行时间

时间:2012-05-17 14:42:03

标签: performance oracle oracle10g

我有一张这样的表:

myTable (id, group_id, run_date, table2_id, description)

我也有这样的索引:

index myTable_grp_i on myTable (group_id)

我过去常常运行这样的查询:

select * from myTable t where t.group_id=3 and t.run_date='20120512';

它工作正常,每个人都很开心。 直到我添加了另一个索引:

index myTable_tab2_i on myTable (table2_id)

我的生活变得悲惨......运行的时间差不多5倍! 执行计划看起来相同(有或没有新索引):

--------------------------------------------------------------------------------
| Id  | Operation                   | Name               | Rows  | Bytes | Cost
--------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |                    |     1 |   220 | 17019
|*  1 |  TABLE ACCESS BY INDEX ROWID| MYTABLE            |     1 |   220 | 17019
|*  2 |   INDEX RANGE SCAN          | MYTABLE_GRP_I      | 17056 |       |    61
--------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   1 - filter("T"."RUN_DATE"='20120512')
   2 - access("T"."GROUP_ID"=3)

我的头上几乎没有头发,为什么另一个未使用的索引在where子句中没有的列上有所作为......


我会更新我检查的内容:
一个。我删除了新索引,运行速度更快 湾我在2个不同的环境中添加了新索引,同样的事情发生了 C。我将MYTABLE_GRP_I更改为列run_date和group_id - 这使它像闪电一样快速运行!!

但为什么会发生呢?

0 个答案:

没有答案