我有一个表设置,其中包含约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)
一切似乎都是正确的,但仍需要一段时间才能为我提供记录。