基于Oracle Function的索引返回缓慢

时间:2018-10-27 15:22:33

标签: oracle indexing

我有一个表设置,其中包含约640m条记录,并且我正在尝试创建索引。

我要选择记录的方式涉及以下内容:

index_i9(ORA_HASH(placard_bcd,128),event);

尽管如此,它仍然返回约3-4百万条记录,而根据我的测试,这需要花费很长的时间(约12分钟左右)。

作为索引是一个坏主意吗?我认为获取3-4百万条记录不需要花费这么长时间。

有什么想法吗?

编辑(添加更多信息):

表中有一堆列,但我不知道是否需要列出所有列:

table_a
container   NOT NULL NUMBER(19),
placard_bcd NOT NULL VARCHAR2(30),
event       NOT NULL VARCHAR(5),
bin_number  NUMBER(3),
...
...

大约需要12分钟才能返回将根据上述索引返回的所有记录。因此,为我提供所有3-4百万条记录。

使用的查询如下所示:

select barcode, event, bin_number
from table_a
where ora_hash(barcode,128) = 105;
and event in ('CLOS','PASG','BUILD');

提供的解释计划是这样:

Plan hash value: 4185630329

-----------------------------------------------------------------------------------------------------------------------
| Id  | Operation                            | Name                           | Rows  | Bytes | Cost (%CPU)| Time     |
-----------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                     |                                | 35074 |  4212K|   338   (0)| 00:00:01 |
|   1 |  INLIST ITERATOR                     |                                |       |       |            |          |
|   2 |   TABLE ACCESS BY INDEX ROWID BATCHED| TABLE_A    | 35074 |  4212K|   338   (0)| 00:00:01 |
|*  3 |    INDEX RANGE SCAN                  | TABLE_A_I9 | 14030 |       |    14   (0)| 00:00:01 |
-----------------------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   3 - access(("EVENT_TYPE"='BUILD' OR "EVENT_TYPE"='CLOS' OR "EVENT_TYPE"='PASG') AND 
              ORA_HASH("PLACARD_BCD",128)=105)

一切似乎都是正确的,但仍需要一段时间才能为我提供记录。

0 个答案:

没有答案