powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / FBI + DETERMINISTIC и ORA-08102: index key not found
21 сообщений из 21, страница 1 из 1
FBI + DETERMINISTIC и ORA-08102: index key not found
    #39541050
Поиском (ORA-08102 fbi) по форуму не нашел, как обойти проблему.
Индекс нужен для поиска по таблице.
Сейчас есть FULL SCAN, индексы на ID есть.
Код: sql
1.
2.
3.
4.
 select
 from t1
 left join t2 on t1.id = t2.id
  where nvl(t2.val, t1.val) = 'QWERTY'



Была идея
функция c 2-мя параметрами (t1.id, t1.val) c селектом из t2, и return nvl(t2.val, t1.val)
Не уникальный индекс по ф-ии на t1.
При Update ловлю ORA-08102: index key not found.
Вот и вопрос - кто как решает проблему с таким поиском (nvl(t2.val, t1.val))
ЗЫ. ORACLE 12.2
...
Рейтинг: 0 / 0
FBI + DETERMINISTIC и ORA-08102: index key not found
    #39541066
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mat. view не предлагать?
...
Рейтинг: 0 / 0
FBI + DETERMINISTIC и ORA-08102: index key not found
    #39541093
andrey_anonymous
Запрос динамически формируется на клиенте.
Фильтры разные могут быть, но однотипные - t1 постоянна, t2 - разные таблицы.
ЗЫ. Про мат. вью ссылку не скинете, применительно к данной проблеме.
...
Рейтинг: 0 / 0
FBI + DETERMINISTIC и ORA-08102: index key not found
    #39541101
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может есть рекомендацииЗапрос динамически формируется на клиенте.CBO не достаточно умен чтоб додуматься до concatenation в этом случае. Распиши через union all.

Код: plaintext
1.
2.
3.
4.
5.
6.
select t1.*
  from t1 join t2 on t1.id = t2.id
 where t2.val = 'QWERTY'
union all
select t1.*
  from t1 left join t2 on t1.id = t2.id
 where t2.val is null and t1.val = 'QWERTY'

Или если ID уникальны

Код: plaintext
1.
2.
3.
4.
5.
6.
select t1.*
  from t1
 where t1.id in (select id from t2 where t2.val = 'QWERTY')
union all
select t1.*
  from t1
 where t1.id not in (select id from t2) and t1.val = 'QWERTY'

Чтоб не было полных сканирований должны быть 4 индекса: по каждому из id и по каждому из val.

Может есть рекомендацииЗЫ. Про мат. вью ссылку не скинете, применительно к данной проблеме.Вероятно предлагается строить MV по соединению и на нее индекс, чтоб потом задействовалось query rewrite,
но к подобным костылям лучше прибегать уже в самых запущенных случаях.
...
Рейтинг: 0 / 0
FBI + DETERMINISTIC и ORA-08102: index key not found
    #39541126
dbms_photoshop
Спасибо, могу играться только с фильтром.

Код: sql
1.
2.
3.
4.
5.
6.
7.
select * 
from t1
where 1 = 1
    and  t1.id in (select t1.id from t1 join t2 on t1.id = t2.id where t2.val = 'QWERTY'
                          union all
                        select t1.id from t1 left join t2 on t1.id = t2.id where t2.val is null and t1.val = 'QWERTY'
                       )
...
Рейтинг: 0 / 0
FBI + DETERMINISTIC и ORA-08102: index key not found
    #39541149
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На поиграться:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
create table dropme_t1(id number primary key, val varchar2(200 char));
create table dropme_t2(id number primary key, val varchar2(200 char));

insert into dropme_t1
select rownum, 'VAL'||rownum
from dual connect by level < 100000;

insert into dropme_t2
select rownum, decode(mod(rownum,77),0,null, 'VAL'||rownum)
from dual connect by level < 100000;

create bitmap index dropme_jidx
on dropme_t1(dropme_t1.val, dropme_t2.val)
from dropme_t1, dropme_t2 
where dropme_t1.id = dropme_t2.id
;
col val format a9

select /*+ index(t1 dropme_jidx)*/ *
 from dropme_t1 t1
 left join dropme_t2 t2 on t1.id = t2.id
  where (t1.val, t2.val) 
     in ( (t1.val, 'VAL654')
        , ('VAL654', null)
        )
;  

select * from table(dbms_xplan.display_cursor());
drop table dropme_t1 purge;
drop table dropme_t2 purge;



Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
table DROPME_T1 created.
table DROPME_T2 created.
99 999 rows inserted.
99 999 rows inserted.
bitmap index DROPME_JIDX created.
        ID VAL               ID VAL     
---------- --------- ---------- ---------
       654 VAL654           654 VAL654    

PLAN_TABLE_OUTPUT                                                                                                                                                                                                                                                                                          
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SQL_ID  3twff52utz1v1, child number 0                                                                                                                                                                                                                                                                        
-------------------------------------                                                                                                                                                                                                                                                                        
select /*+ index(t1 dropme_jidx)*/ *  from dropme_t1 t1  left join                                                                                                                                                                                                                                           
dropme_t2 t2 on t1.id = t2.id   where (t1.val, t2.val)       in (                                                                                                                                                                                                                                            
(t1.val, 'VAL654')         , ('VAL654', null)         )                                                                                                                                                                                                                                                      
                                                                                                                                                                                                                                                                                                             
Plan hash value: 3545522000                                                                                                                                                                                                                                                                                  
                                                                                                                                                                                                                                                                                                             
----------------------------------------------------------------------------------------------------                                                                                                                                                                                                         
| Id  | Operation                            | Name        | Rows  | Bytes | Cost (%CPU)| Time     |                                                                                                                                                                                                         
----------------------------------------------------------------------------------------------------                                                                                                                                                                                                         
|   0 | SELECT STATEMENT                     |             |       |       |  1245 (100)|          |                                                                                                                                                                                                         
|*  1 |  HASH JOIN                           |             |     4 |  3320 |  1245   (1)| 00:00:01 |                                                                                                                                                                                                         
|*  2 |   TABLE ACCESS FULL                  | DROPME_T2   |     4 |  1660 |   103   (1)| 00:00:01 |                                                                                                                                                                                                         
|   3 |   TABLE ACCESS BY INDEX ROWID BATCHED| DROPME_T1   | 83538 |    33M|  1142   (1)| 00:00:01 |                                                                                                                                                                                                         
|   4 |    BITMAP CONVERSION TO ROWIDS       |             |       |       |            |          |                                                                                                                                                                                                         
|*  5 |     BITMAP INDEX FULL SCAN           | DROPME_JIDX |       |       |            |          |                                                                                                                                                                                                         
----------------------------------------------------------------------------------------------------                                                                                                                                                                                                         
                                                                                                                                                                                                                                                                                                             
Predicate Information (identified by operation id):                                                                                                                                                                                                                                                          
---------------------------------------------------                                                                                                                                                                                                                                                          
                                                                                                                                                                                                                                                                                                             
   1 - access("T1"."ID"="T2"."ID")                                                                                                                                                                                                                                                                           
   2 - filter("T2"."VAL"='VAL654')                                                                                                                                                                                                                                                                           
   5 - filter("T1"."SYS_NC00003$" IS NOT NULL)                                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                                                                                             
Note                                                                                                                                                                                                                                                                                                         
-----                                                                                                                                                                                                                                                                                                        
   - dynamic statistics used: dynamic sampling (level=2)                                                                                                                                                                                                                                                     
                                                                                                                                                                                                                                                                                                             

 30 rows selected 

table DROPME_T1 dropped.
table DROPME_T2 dropped.

...
Рейтинг: 0 / 0
FBI + DETERMINISTIC и ORA-08102: index key not found
    #39541188
andrey_anonymous, спасибо еще раз, интересное решение, не знал про
Код: plsql
1.
2.
3.
4.
5.
create bitmap index dropme_jidx
on dropme_t1(dropme_t1.val, dropme_t2.val)
from dropme_t1, dropme_t2 
where dropme_t1.id = dropme_t2.id
;


Что смущает
1. bitmap index - на боевой, активно изменяемой БД.
2. BITMAP INDEX FULL SCAN
3. select /*+ index(t1 dropme_jidx)*/ * - это не могу, могу только and filter, хранится в поле таблицы, и при вводе пользователем какого либо фильтра, подставляется еще один AND........

Прошу прощения, что ввел в заблуждение с ИД, хотя по логике должны быть unique. но........
Пример максимально приближенный к реальному положению дел
Игрался так

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
drop table t_drop_my_1 purge;
drop table t_drop_my_2 purge;
drop function f_drop_my;

create table t_drop_my_1 as
select rownum as id, case when level <= 1e3 then rownum end as id_parent, dbms_random.string('U',10) as val
from dual connect by level <= 2e3
;

create table t_drop_my_2 as
select rownum as id, dbms_random.string('U',10) as val
from dual connect by level <= 1e3
;

create unique index t_drop_my_1_idx1 on t_drop_my_1(id);

create        index t_drop_my_1_idx2 on t_drop_my_1(id_parent); ----может быть не уникальным !!!!!!!!!!!!!!!!!!

create unique index t_drop_my_2_idx1 on t_drop_my_2(id);

---Есть запрос c FULL SCAN, выбирающий 1 - 5 строк
select t1.*, t2.*, nvl(t2.val, t1.val)
from t_drop_my_1 t1
left join t_drop_my_2 t2 on t2.id = t1.id_parent
 where 1 = 1
   and nvl(t2.val, t1.val) = 'FRCSFFQHYB'
;

create FUNCTION f_drop_my (p_id_parent number, p_val varchar2)
  RETURN  varchar2 deterministic
 IS
  v_val varchar2(20);
BEGIN
  select val
   into v_val
  from t_drop_my_2
   where id = p_id_parent;
  
  return nvl(v_val, p_val); 
 
exception 
 when no_data_found then return p_val;
 when too_many_rows then return p_val;
END;

create index t_drop_my_1_idx3 on t_drop_my_1( f_drop_my(id_parent,val) );

select * 
from user_tab_cols u
 where lower(u.table_name) = 't_drop_my_1'
; 

--Теперь все отлично 
select t1.*, t1.SYS_NC00004$, 
       t2.*, f_drop_my(t1.id_parent, t1.val), f_drop_my(t1.id_parent + 0, t1.val)
from t_drop_my_1 t1
left join t_drop_my_2 t2 on t2.id = t1.id_parent
 where 1 = 1
   --and f_drop_my(t1.id_parent, t1.val) = 'QWERTY_1004_2'
   and t1.id = 1004
;

--НО!!!!!
insert into t_drop_my_2 (id, val) values (1004, 'QWERTY_1004');
update t_drop_my_1 set ID_PARENT = 1004 where id = 1004;
commit;

update t_drop_my_2 set val = 'QWERTY_1004_2' where id = 1004;
update t_drop_my_1 set ID_PARENT = null where id = 1004;
----ORA-08102: index key not found, obj# 194166, file 34, block 1084767 (2)
commit;




Поэтому вариант с
Код: plsql
1.
2.
3.
4.
    and  t1.id in (select t1.id from t1 join t2 on t1.id = t2.id where t2.val = 'QWERTY'
                          union all
                        select t1.id from t1 left join t2 on t1.id = t2.id where t2.val is null and t1.val = 'QWERTY'
                       )


кажется более приемлимым
...
Рейтинг: 0 / 0
FBI + DETERMINISTIC и ORA-08102: index key not found
    #39541192
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может есть рекомендацииandrey_anonymous, спасибо еще раз, интересное решение, не знал про
2. BITMAP INDEX FULL SCAN
Это только моделька для игрищ, не решение.
Я просто вспомнил про join index и попробовал "с ходу" впихнуть его - пока неудачно :)
...
Рейтинг: 0 / 0
FBI + DETERMINISTIC и ORA-08102: index key not found
    #39541195
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще похоже на факты и измерения.
Если есть возможность переформулировать запросы - посмотрите, может найдете что-то полезное:
https://logicalread.com/oracle-11g-best-uses-bitmap-join-index-mc02/#.We83Qxu7W00
...
Рейтинг: 0 / 0
FBI + DETERMINISTIC и ORA-08102: index key not found
    #39565664
Переделал порядка 8-ми однотипных фильтров, все залетало, план строится, начиная с подзапроса с UNION.
Но на одном фильтре, беда, которая зависит от колонки в селекте, это ф-я по индексированной колонке (не уникальный)
Если ее убрать из запроса все хорошо, раскомментить план летит, начинается НЕ с подзапроса, если просто добавить эту колонку, тоже хорошо. В запросе куча подобных ф-ий, и вот с одной беда
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
select t1.col1, 
       f_2(t1.col2),
  
       f_3(t1.col3), --- здесь засада, все ф-ии однотипные, селект из справочников разных, если закомментить все летает
       f_3(t1.col3 + 0), --- А так все отлично, но это править не могу, см. выше )))) 
       t1.col3, -- так план не слетает (все хорошо)
       ---------       
       t1.col....,
       f_5(...)
       и т д. --- 50 колонок
        
from t1
where 1 = 1
    and .............
    and (..... or ..... )
    and  t1.id in (select --+ index(t2 t2_idx) cardinality(t1 1) cardinality(t2 1) 
                          t1.id from t1 join t2 on t1.id = t2.id where t2.val = 'QWERTY'
                     union all
                   select --+ index(t1 t1_idx) cardinality(t1 1)
                          t1.id from t1 left join t2 on t1.id = t2.id where t2.val is null and t1.val = 'QWERTY'
                   )



Пробовал переделывать ф-ю, убирал дерминистик, сносил индекс на справочнике (9000 записей) по (ид, наме) - доступ только индексу, по ИД (ключ ) не трогал, жестко прибил кардинальность, ничего не помогает.

С чем может быть связано такое поведение(куча однотипных ф-ий, и только на одной такая беда)?
Какие варианты еще можно попробовать, ф-ю править могу (но в ней простой селект по ПК).
...
Рейтинг: 0 / 0
FBI + DETERMINISTIC и ORA-08102: index key not found
    #39565684
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может есть рекомендации(но в ней простой селект по ПК).

Уверены что по ПК?
мож full scan идет из-за неявных преобразований, или там из-за nls

зы
для теста, вместо ф-ции
,(select xxx frim ttt where ....=t1.col3)

....
stax
...
Рейтинг: 0 / 0
FBI + DETERMINISTIC и ORA-08102: index key not found
    #39565710
,(select xxx frim ttt where ....=t1.col3)
так то же пробовал, все отлично. план строится, начиная с подзапроса в IN
...
Рейтинг: 0 / 0
FBI + DETERMINISTIC и ORA-08102: index key not found
    #39565738
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может есть рекомендации,(select xxx frim ttt where ....=t1.col3)
так то же пробовал, все отлично. план строится, начиная с подзапроса в IN

смотреть внимательней ф-цию, что в ней не так

для проверки
добавить в начале ф-ции

if (p_code is not null) then return p_code; end if;

если все отлично, то проблема в коде ф-ции

....
stax
...
Рейтинг: 0 / 0
FBI + DETERMINISTIC и ORA-08102: index key not found
    #39565783
В функции, как раз и есть кусок в начале, наподобие
if (p_code is not null) then return p_code; end if;
только
if p_code is null then return null; end if;
в отличии от других ф-ий.
Пробовал этот кусок убирать, не помогает.
ЗЫ. Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
ЗЫЫ. Сейчас заметил, если

f_3(t1.col3),
(select xxx frim ttt where ....=t1.col3)
вместе в запросе,
то то же все отлично, комментишь (select xxx frim ttt where ....=t1.col3) , все летит
cost c 50 взлетает до 370.000
Беда.......
...
Рейтинг: 0 / 0
FBI + DETERMINISTIC и ORA-08102: index key not found
    #39565802
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может есть рекомендацииничего не помогаетПланы показывай для медленого и быстрого с приведением конкретного текста запроса.
...
Рейтинг: 0 / 0
FBI + DETERMINISTIC и ORA-08102: index key not found
    #39565803
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может есть рекомендацииВ функции, как раз и есть кусок в начале, наподобие
if (p_code is not null) then return p_code; end if;
только
if p_code is null then return null; end if;
в отличии от других ф-ий.
Пробовал этот кусок убирать, не помогает.
ЗЫ. Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
ЗЫЫ. Сейчас заметил, если

f_3(t1.col3),
(select xxx frim ttt where ....=t1.col3)
вместе в запросе,
то то же все отлично, комментишь (select xxx frim ttt where ....=t1.col3) , все летит
cost c 50 взлетает до 370.000
Беда.......

я предлагал сделать аля null ф-цию,
добавив для теста в начале if (p_code is not null) then return p_code; end if;
время выполнения не будет зависеть от тела ф=ции,
если будет дальше плохо, то проблема не в ф-ции, а в плане

возможно добавление t1.col3 в запрос меняет план

.....
stax
...
Рейтинг: 0 / 0
FBI + DETERMINISTIC и ORA-08102: index key not found
    #39565806
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может есть рекомендации,

Со стоимостью функций еще можешь играться (пример 17664121 ), но я рекомендовал бы этого избежать.
...
Рейтинг: 0 / 0
FBI + DETERMINISTIC и ORA-08102: index key not found
    #39565856
Стас, от тела ф-ии не зависит, я же писал:
Код: plsql
1.
 f_3(t1.col3 + 0), --- А так все отлично, но это править не могу, см. выше )))) 


Да, если закомментить, остальные условия
Код: sql
1.
2.
    and .............
    and (..... or ..... or.. (подзапрос) )


тоже все отлично, план строится начиная с подзапроса с юнион

dbms_photoshop
насчет оригинальных планов все понимаю, но не могу ))))
а подзапрос один в один, также с хинтами

ЗЫ. Ладно, всем спасибо за участие
...
Рейтинг: 0 / 0
FBI + DETERMINISTIC и ORA-08102: index key not found
    #39565879
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FBI + DETERMINISTIC и ORA-08102:насчет оригинальных планов все понимаю, но не могуНе буду уточнять, что в плане возможно заменить руками имена объектов, если ты не можешь сделать изолированный test case для одного запроса.
Обычно если человек в состоянии сделсть test case, то он и пофиксить может исходный случай.
...
Рейтинг: 0 / 0
FBI + DETERMINISTIC и ORA-08102: index key not found
    #39565912
dbms_photoshop
ПЛОХО
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
		COST	CARDINALITY	OPTIONS	BYTES	CPU COST	IO COST	TEMP SPACE
SELECT STATEMENT, GOAL = HINT: FIRST_ROWS		365707	1		1334	34649995081	352438	
 COUNT STOPKEY				STOPKEY				
  FILTER								
   HASH JOIN		365707	4		5336	34649995081	352438	
    VIEW	VW_NSO_1	8	2		34	59062	8	
     HASH UNIQUE		8	2	UNIQUE	34	59062	8	
      UNION-ALL	 ---- С ЭТОГО  НАДО НАЧАТЬ 							
       NESTED LOOPS		5	1		24	37297	5	
        INDEX RANGE SCAN	IDX_1 	3	1	RANGE SCAN	13	21764	3	
        INDEX RANGE SCAN	IDX_2	2	1	RANGE SCAN	11	15533	2	
       INDEX RANGE SCAN	IDX_2	3	1	RANGE SCAN	10	21764	3	
    VIEW		365653	1335105		1773019440	34515876860	352436	
     HASH JOIN RIGHT OUTER		365653	1335105	RIGHT OUTER	491318640	34515876860	352436	
      INDEX STORAGE FAST FULL SCAN		18	8527	STORAGE FAST FULL SCAN	264337	1372191	17	
      HASH JOIN RIGHT OUTER		365584	1335105	RIGHT OUTER	449930385	34379115119	352419	
       TABLE ACCESS STORAGE FULL		5	107	STORAGE FULL	3317	210496	5	
       HASH JOIN RIGHT OUTER		365527	1335105	RIGHT OUTER	408542130	34244778073	352414	
        VIEW		335	29		1305	9168997	331	
         CONCATENATION								
          FILTER								
           MERGE JOIN OUTER		19	1	OUTER	64	5798761	17	
            SORT JOIN		7	165	JOIN	8415	3089470	6	
             TABLE ACCESS STORAGE FULL		6	165	STORAGE FULL	8415	423263	6	
            SORT JOIN		12	1	JOIN	13	2709290	11	
             VIEW		11	1		13	97844	11	
              MERGE JOIN OUTER		11	1	OUTER	13	97844	11	
               MERGE JOIN OUTER		8	1	OUTER		64280	8	
                NESTED LOOPS OUTER		5	1	OUTER		40836	5	
                 FAST DUAL		2	1			7271	2	
                 VIEW		3	1			33564	3	
                  TABLE ACCESS BY INDEX ROWID		3	1	BY INDEX ROWID	842	33564	3	
                   INDEX UNIQUE SCAN		2	1	UNIQUE SCAN		15293	2	
                VIEW		3	1			23444	3	
                 INDEX UNIQUE SCAN		2	1	UNIQUE SCAN		15293	2	
               BUFFER SORT		8	1	SORT	13	74400	8	
                VIEW		3	1		13	33564	3	
                 TABLE ACCESS BY INDEX ROWID		3	1	BY INDEX ROWID	842	33564	3	
                  INDEX UNIQUE SCAN		2	1	UNIQUE SCAN		15293	2	
          FILTER								
           MERGE JOIN OUTER		315	28	OUTER	1792	3370236	314	
            TABLE ACCESS STORAGE FULL		6	28	STORAGE FULL	1428	630593	6	
            BUFFER SORT		309	1	SORT	13	2739643	308	
             VIEW		11	1		13	97844	11	
              MERGE JOIN OUTER		11	1	OUTER	13	97844	11	
               MERGE JOIN OUTER		8	1	OUTER		64280	8	
                NESTED LOOPS OUTER		5	1	OUTER		40836	5	
                 FAST DUAL		2	1			7271	2	
                 VIEW		3	1			33564	3	
                  TABLE ACCESS BY INDEX ROWID		3	1	BY INDEX ROWID	842	33564	3	
                   INDEX UNIQUE SCAN		2	1	UNIQUE SCAN		15293	2	
                VIEW		3	1			23444	3	
                 INDEX UNIQUE SCAN		2	1	UNIQUE SCAN		15293	2	
               BUFFER SORT		8	1	SORT	13	74400	8	
                VIEW		3	1		13	33564	3	
                 TABLE ACCESS BY INDEX ROWID		3	1	BY INDEX ROWID	842	33564	3	
                  INDEX UNIQUE SCAN		2	1	UNIQUE SCAN		15293	2	
        HASH JOIN RIGHT OUTER		365141	1335105	RIGHT OUTER	348462405	34101494226	352083	115966000
         TABLE ACCESS STORAGE FULL		126682	1414128	STORAGE FULL	98988960	5371618483	124625	
         HASH JOIN		212433	1335105		255005055	28056562012	201689	129508000
          HASH JOIN OUTER		108558	1335105	OUTER	113483925	12751403697	103675	106816000
           JOIN FILTER CREATE		3184	1335105	CREATE	90787140	806570876	2875	
            PART JOIN FILTER CREATE		3184	1335105	CREATE	90787140	806570876	2875	
             HASH JOIN		3184	1335105		90787140	806570876	2875	
              INDEX STORAGE FAST FULL SCAN		18	8527	STORAGE FAST FULL SCAN	264337	1372191	17	
              PARTITION RANGE SINGLE		3114	1335105	SINGLE	49398885	669809135	2858	
               TABLE ACCESS STORAGE FULL		3114	1335105	STORAGE FULL	49398885	669809135	2858	
           JOIN FILTER USE		66693	15633070	USE	265762190	8337156809	63500	
            PARTITION RANGE SINGLE		66693	15633070	SINGLE	265762190	8337156809	63500	
             TABLE ACCESS STORAGE FULL		66693	15633070	STORAGE FULL	265762190	8337156809	63500	
          TABLE ACCESS STORAGE FULL		84506	1337638	STORAGE FULL	141789628	14693034333	78880	
   NESTED LOOPS		3	1		20	65560	3	
    TABLE ACCESS BY INDEX ROWID		2	1	BY INDEX ROWID	7	15633	2	
     INDEX UNIQUE SCAN		1	1	UNIQUE SCAN		8171	1	
    VIEW		1	1		13	49927	1	
     UNION-ALL								
      NESTED LOOPS		6	5		90	54449	6	
       TABLE ACCESS BY INDEX ROWID BATCHED		6	5	BY INDEX ROWID BATCHED	45	44949	6	
        INDEX RANGE SCAN		2	5	RANGE SCAN		15443	2	
       INDEX UNIQUE SCAN		0	1	UNIQUE SCAN	9	1900	0	
      FILTER								
       COLLECTION ITERATOR PICKLER FETCH		22	50	PICKLER FETCH	100	2691529	21	
   TABLE ACCESS BY INDEX ROWID		1	1	BY INDEX ROWID	6	8681	1	
    INDEX UNIQUE SCAN		0	1	UNIQUE SCAN		1050	0	




ХОРОШО
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
		COST	CARDINALITY	OPTIONS	BYTES	CPU COST	IO COST	TEMP SPACE
SELECT STATEMENT, GOAL = HINT: FIRST_ROWS		45	1		388	453804	45	
 COUNT STOPKEY				STOPKEY				
  FILTER								
   NESTED LOOPS		45	4		1552	453804	45	
    NESTED LOOPS OUTER		41	4	OUTER	1428	421118	41	
     NESTED LOOPS OUTER		39	4	OUTER	1304	404776	39	
      NESTED LOOPS OUTER		31	4	OUTER	1236	348730	31	
       NESTED LOOPS OUTER		23	4	OUTER	956	279398	23	
        NESTED LOOPS		19	4		832	242316	19	
         NESTED LOOPS OUTER		11	4	OUTER	684	114675	11	
          NESTED LOOPS		10	4		504	105483	10	
           VIEW	VW_NSO_1	8	2		34	59062	8	
            HASH UNIQUE		8	2	UNIQUE	34	59062	8	
             UNION-ALL	 --- С ЭТОГО НАЧИНАЕТ							
              NESTED LOOPS		5	1		24	37297	5	
               INDEX RANGE SCAN	IDX_1 	3	1	RANGE SCAN	13	21764	3	
               INDEX RANGE SCAN	IDX_2	2	1	RANGE SCAN	11	15533	2	
              INDEX RANGE SCAN	IDX_2	3	1	RANGE SCAN	10	21764	3	
           TABLE ACCESS BY INDEX ROWID BATCHED		4	2	BY INDEX ROWID BATCHED	240	49031	4	
            INDEX RANGE SCAN		2	2	RANGE SCAN		15493	2	
          VIEW PUSHED PREDICATE		1	1		45	9191	1	
           FILTER								
            NESTED LOOPS OUTER		13	1	OUTER	64	113537	13	
             TABLE ACCESS BY INDEX ROWID		2	1	BY INDEX ROWID	51	15693	2	
              INDEX UNIQUE SCAN		1	1	UNIQUE SCAN		8171	1	
             VIEW		11	1		13	97844	11	
              MERGE JOIN OUTER		11	1	OUTER	13	97844	11	
               MERGE JOIN OUTER		8	1	OUTER		64280	8	
                NESTED LOOPS OUTER		5	1	OUTER		40836	5	
                 FAST DUAL		2	1			7271	2	
                 VIEW		3	1			33564	3	
                  TABLE ACCESS BY INDEX ROWID		3	1	BY INDEX ROWID	842	33564	3	
                   INDEX UNIQUE SCAN		2	1	UNIQUE SCAN		15293	2	
                VIEW		3	1			23444	3	
                 INDEX UNIQUE SCAN		2	1	UNIQUE SCAN		15293	2	
               BUFFER SORT		8	1	SORT	13	74400	8	
                VIEW		3	1		13	33564	3	
                 TABLE ACCESS BY INDEX ROWID		3	1	BY INDEX ROWID	842	33564	3	
                  INDEX UNIQUE SCAN		2	1	UNIQUE SCAN		15293	2	
         TABLE ACCESS BY GLOBAL INDEX ROWID		2	1	BY GLOBAL INDEX ROWID	37	31910	2	
          INDEX UNIQUE SCAN		1	1	UNIQUE SCAN		9021	1	
        TABLE ACCESS BY INDEX ROWID		1	1	BY INDEX ROWID	31	9270	1	
         INDEX UNIQUE SCAN		0	1	UNIQUE SCAN		1900	0	
       TABLE ACCESS BY INDEX ROWID		2	1	BY INDEX ROWID	70	17333	2	
        INDEX UNIQUE SCAN		1	1	UNIQUE SCAN		9021	1	
      TABLE ACCESS BY GLOBAL INDEX ROWID		2	1	BY GLOBAL INDEX ROWID	17	14011	2	
       INDEX UNIQUE SCAN		1	1	UNIQUE SCAN		9021	1	
     INDEX RANGE SCAN		1	1	RANGE SCAN	31	8171	1	
    INDEX RANGE SCAN		1	1	RANGE SCAN	31	8171	1	
   NESTED LOOPS		3	1		20	65560	3	
    TABLE ACCESS BY INDEX ROWID		2	1	BY INDEX ROWID	7	15633	2	
     INDEX UNIQUE SCAN		1	1	UNIQUE SCAN		8171	1	
    VIEW		1	1		13	49927	1	
     UNION-ALL								
      NESTED LOOPS		6	5		90	54449	6	
       TABLE ACCESS BY INDEX ROWID BATCHED		6	5	BY INDEX ROWID BATCHED	45	44949	6	
        INDEX RANGE SCAN		2	5	RANGE SCAN		15443	2	
       INDEX UNIQUE SCAN		0	1	UNIQUE SCAN	9	1900	0	
      FILTER								
       COLLECTION ITERATOR PICKLER FETCH		22	50	PICKLER FETCH	100	2691529	21	
   TABLE ACCESS BY INDEX ROWID		1	1	BY INDEX ROWID	6	8681	1	
    INDEX UNIQUE SCAN		0	1	UNIQUE SCAN		1050	0	


...
Рейтинг: 0 / 0
FBI + DETERMINISTIC и ORA-08102: index key not found
    #39565916
Да, и насчет "обычно" согласен, НО я не могу смоделировать эту ситуацию
ЗЫ. Я писал, 8 однотипных фильтров по таким запросам (4 по этому), и вот ....
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / FBI + DETERMINISTIC и ORA-08102: index key not found
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]