Индекс на основе функций Oracle возвращается медленно - PullRequest
0 голосов
/ 27 октября 2018

У меня есть таблица настройки, которая содержит около 640 м записей, и я пытаюсь создать индекс.

Способ выбора записей включает в себя что-то вроде этого:

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)

Все кажется правильным, но мне все еще нужно время, чтобы предоставить мне записи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...