powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / План. Джоин с group by и фильтр по коллекции
23 сообщений из 23, страница 1 из 1
План. Джоин с group by и фильтр по коллекции
    #38348067
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
11.2.0.3
Есть view, где джоин мастера с агрегатами по деталям. Из view выборки небольшого количества строк по ключевым полям и дополнительным фильтрам.
Не сростается проброс джоина в подзапрос, если есть фильтр по коллекции.
ддл
Код: 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.
drop table testco purge;
drop table testco_dtl purge;

create table testco (
   id,
   dt,
   gid not null,
   data,
   constraint testco#pk primary key (id)
) nocompress 
as
select level, date '2013-01-01'+level/1e3, mod(level, 4000), lpad(level, 200, '*') 
from dual
connect by level<=1e5;

create index testco#gid on testco(gid);

create table testco_dtl (
   id,
   num,
   data,
   constraint testco_dtl#pk primary key (id, num)
) nocompress 
as
select ceil(level/3), mod(level, 3), lpad(level, 100, '*') 
from dual
connect by level<=3e5;

Здесь джоин пробрасывается в подзапрос и все быстренько
Код: 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.
with t as (
  select /*+ push_pred(tt2) */ t1.id, t1.dt, t1.gid, t1.data, tt2.c2, tt2.n2
  from testco t1
  left join (
     select id, count(*) c2, sum(num) n2
     from testco_dtl t2
     group by id
  ) tt2
    on tt2.id=t1.id
)
select *
from t
where t.gid = 2000
--   and exists (select 1 from table(sys.odcivarchar2list('x')))
;

Plan hash value: 3856469098
----------------------------------------------------------------------------------------------
| Id  | Operation                    | Name          | Rows  | Bytes | Cost (%CPU)| Time     |
----------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT             |               |    79 | 36735 |   177   (0)| 00:00:03 |
|   1 |  NESTED LOOPS OUTER          |               |    79 | 36735 |   177   (0)| 00:00:03 |
|   2 |   TABLE ACCESS BY INDEX ROWID| TESTCO        |    25 | 10925 |    27   (0)| 00:00:01 |
|*  3 |    INDEX RANGE SCAN          | TESTCO#GID    |    25 |       |     1   (0)| 00:00:01 |
|   4 |   VIEW PUSHED PREDICATE      |               |     1 |    28 |     6   (0)| 00:00:01 |
|   5 |    SORT GROUP BY             |               |  3100 | 80600 |     6   (0)| 00:00:01 |
|*  6 |     INDEX RANGE SCAN         | TESTCO_DTL#PK |  3100 | 80600 |     6   (0)| 00:00:01 |
----------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   3 - access("T1"."GID"=2000)
   6 - access("ID"="T1"."ID")
Note
-----
   - dynamic sampling used for this statement (level=2)

Здесь добавлено условие и уже full scan большого индекса. изрядно тормозит.
Код: 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.
with t as (
  select /*+ push_pred(tt2) */ t1.id, t1.dt, t1.gid, t1.data, tt2.c2, tt2.n2
  from testco t1
  left join (
     select id, count(*) c2, sum(num) n2
     from testco_dtl t2
     group by id
  ) tt2
    on tt2.id=t1.id
)
select *
from t
where t.gid = 2000
   and exists (select 1 from table(sys.odcivarchar2list('x')))
;

Plan hash value: 191410008
--------------------------------------------------------------------------------------------------------
| Id  | Operation                              | Name          | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                       |               |   310K|   140M|   247   (5)| 00:00:03 |
|*  1 |  FILTER                                |               |       |       |            |          |
|*  2 |   HASH JOIN OUTER                      |               |   310K|   140M|   245   (5)| 00:00:03 |
|   3 |    TABLE ACCESS BY INDEX ROWID         | TESTCO        |    25 | 10925 |    27   (0)| 00:00:01 |
|*  4 |     INDEX RANGE SCAN                   | TESTCO#GID    |    25 |       |     1   (0)| 00:00:01 |
|   5 |    VIEW                                |               |   310K|    11M|   216   (5)| 00:00:03 |
|   6 |     HASH GROUP BY                      |               |   310K|  7871K|   216   (5)| 00:00:03 |
|   7 |      INDEX FAST FULL SCAN              | TESTCO_DTL#PK |   310K|  7871K|   208   (1)| 00:00:03 |
|   8 |   COLLECTION ITERATOR CONSTRUCTOR FETCH|               |     1 |       |     2   (0)| 00:00:01 |
--------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   1 - filter( EXISTS (SELECT 0 FROM TABLE() "KOKBF$0"))
   2 - access("TT2"."ID"(+)="T1"."ID")
   4 - access("T1"."GID"=2000)
Note
-----
   - dynamic sampling used for this statement (level=2)


View это "with t", конечно же, посложнее, используется в нескольких местах (менять можно с оглядкой...). Коллекция содержит мало строк и несколько атрибутов, которые под existом сравниваются с полями view (не из testco_dtl).
Как бы заставить запрос работать по ключевым полям.
...
Рейтинг: 0 / 0
План. Джоин с group by и фильтр по коллекции
    #38348069
Фотография кит северных морей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-,

на XE 11.2.0.2 не проталкивается даже без фильтра по коллекции.
...
Рейтинг: 0 / 0
План. Джоин с group by и фильтр по коллекции
    #38348151
Cristiano_Rivaldo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
А так ?
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
with t as (
  select  t1.id, t1.dt, t1.gid, t1.data, count(t2.id), sum(t2.num)
  from testco t1 left join testco_dtl t2 on t1.id =  t2.id
 group by
       t1.id, t1.dt, t1.gid, t1.data 
  
)
select *
from t
where t.gid = 2000
and exists (select 1 from table(sys.odcivarchar2list('x')))






Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
SELECT STATEMENT, GOAL = ALL_ROWS			83	1	163	3203
 HASH GROUP BY			83	1	163	3203
  FILTER						
   NESTED LOOPS OUTER			80	5139	837657	3088
    TABLE ACCESS BY INDEX ROWID	PARUS	TESTCO	30	25	3425	1158
      INDEX RANGE SCAN	PARUS	TESTCO#GID 	1	25		39
     INDEX RANGE SCAN	PARUS	TESTCO_DTL#PK	2 	206	5356	78
   COLLECTION ITERATOR CONSTRUCTOR FETCH			2	1		78
...
Рейтинг: 0 / 0
План. Джоин с group by и фильтр по коллекции
    #38348219
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
-2-,

по коллекции предикатов нет с полями из основного запроса? В принципе можно просто спрятать kokbf$ извращенно:
Код: 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.
select
  *
from (
  select t1.id, t1.dt, t1.gid, t1.data, tt2.c2, tt2.n2
  from testco t1
  left join (
     select id, count(*) c2, sum(num) n2
     from testco_dtl t2
     group by id
  ) tt2
    on tt2.id=t1.id
) t
where t.gid = 2000
   and (dbms_xmlgen.getxmltype(q'[select count(*) cnt from table(sys.odcivarchar2list('x')) where rownum=1]')).getnumberval()=1;

PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Plan hash value: 3873857181

-----------------------------------------------------------------------------------------------
| Id  | Operation                     | Name          | Rows  | Bytes | Cost (%CPU)| Time     |
-----------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT              |               |    25 |  6100 |    28   (0)| 00:00:01 |
|*  1 |  FILTER                       |               |       |       |            |          |
|   2 |   NESTED LOOPS OUTER          |               |    25 |  6100 |    28   (0)| 00:00:01 |
|   3 |    TABLE ACCESS BY INDEX ROWID| TESTCO        |    25 |  5450 |     3   (0)| 00:00:01 |
|*  4 |     INDEX RANGE SCAN          | TESTCO#GID    |    25 |       |     1   (0)| 00:00:01 |
|   5 |    VIEW PUSHED PREDICATE      |               |     1 |    26 |     1   (0)| 00:00:01 |
|   6 |     SORT GROUP BY             |               |     1 |     8 |     1   (0)| 00:00:01 |
|*  7 |      INDEX RANGE SCAN         | TESTCO_DTL#PK |     3 |    24 |     1   (0)| 00:00:01 |
-----------------------------------------------------------------------------------------------

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

   1 - filter("XMLTYPE"."GETNUMBERVAL"("DBMS_XMLGEN"."GETXMLTYPE"('select count(*) cnt
              from table(sys.odcivarchar2list(''x'')) where rownum=1'))=1)
   4 - access("T1"."GID"=2000)
   7 - access("ID"="T1"."ID")

...
Рейтинг: 0 / 0
План. Джоин с group by и фильтр по коллекции
    #38348281
Cristiano_Rivaldo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Group by в подзапросе, потом объединение - это такой стиль ???

У каждого конечно свой стиль, но лучше не насиловать оптимизатор. Ато он план не выстроит адекватный.
...
Рейтинг: 0 / 0
План. Джоин с group by и фильтр по коллекции
    #38348291
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Cristiano_Rivaldo,

там скорее всего вьюха какая-нибудь, да и все прекрасно построило бы, не будь там коллекции. С этими kokbf$ вечно какая-нибудь хрень
...
Рейтинг: 0 / 0
План. Джоин с group by и фильтр по коллекции
    #38348333
Cristiano_Rivaldo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
xtender,

Я хотел обратить внимание на саму логику запроса (не важно есть ли во внешнем условии коллекция или нет).
Что с точки зрения затрат CPU производительнее ? :

1) Индексный поиск TESTCO#GID. После для каждой записи поиск по ID в TESTCO_DTL (индекс TESTCO_DTL#PK) с последующей группировкой. Получается если INDEX RANGE SCAN TESTCO#GID вернет 5 записей - GROUP BY выполнится 5 раз.

2) Индексный поиск TESTCO#GID. Объединение по nested loop c TESTCO_DTL. Потом один общий GROUP BY (Мой вариант)
...
Рейтинг: 0 / 0
План. Джоин с group by и фильтр по коллекции
    #38348345
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-Здесь добавлено условие и уже full scan большого индекса. изрядно тормозит.На самом деле добавление этого подзапроса предотвращает оптимизатор от выполнения той же трансформации, что и в первом случае.

Если для первого случая посмотреть 10053, то он преобразовывает inline view к lateral (ключевое слово ясное дело добавлено вручную).
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select /*+ PUSH_PRED ("TT2") */
 "T1"."ID"   "ID",
 "T1"."DT"   "DT",
 "T1"."GID"  "GID",
 "T1"."DATA" "DATA",
 "TT2"."C2"  "C2",
 "TT2"."N2"  "N2"
  from "TESTCO" "T1",
       lateral (select count(*) "C2", sum("T2"."NUM") "N2"
                  from "TESTCO_DTL" "T2"
                 where "T2"."ID" = "T1"."ID" having count(*) > 0)  "TT2"
 where "T1"."GID" = 2000

Во втором случае - нет.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
select /*+ PUSH_PRED ("TT2") */
 "T1"."ID"   "ID",
 "T1"."DT"   "DT",
 "T1"."GID"  "GID",
 "T1"."DATA" "DATA",
 "TT2"."C2"  "C2",
 "TT2"."N2"  "N2"
  from "MEGA"."TESTCO" "T1",
       (select "T2"."ID" "ID", count(*) "C2", sum("T2"."NUM") "N2"
          from "MEGA"."TESTCO_DTL" "T2"
         group by "T2"."ID") "TT2"
 where "T1"."GID" = 2000
   and exists
 (select 0 from table("SYS"."ODCIVARCHAR2LIST"('x')) "KOKBF$")
   and "TT2"."ID"(+) = "T1"."ID"


Теперь во втором случае если в преобразованном запросе убрать exists, то проталкивания все равно не будет.

Собственно, такая же проблема наблюдается, если "(select 1 from table(sys.odcivarchar2list('x')))" поместить в select list.
Самый банальный путь, чтоб заставить оптимизатор закрыть глаза на этот подзапрос - обернуть его в функцию.
...
Рейтинг: 0 / 0
План. Джоин с group by и фильтр по коллекции
    #38348357
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cristiano_RivaldoЯ хотел обратить внимание на саму логику запроса (не важно есть ли во внешнем условии коллекция или нет).
Что с точки зрения затрат CPU производительнее ? :

1) Индексный поиск TESTCO#GID. После для каждой записи поиск по ID в TESTCO_DTL (индекс TESTCO_DTL#PK) с последующей группировкой. Получается если INDEX RANGE SCAN TESTCO#GID вернет 5 записей - GROUP BY выполнится 5 раз.

2) Индексный поиск TESTCO#GID. Объединение по nested loop c TESTCO_DTL. Потом один общий GROUP BY (Мой вариант)Что в лоб, что по лбу. Только во втором случае group by вместо одного поля группировки будет идти по 50 полям и по строкам, которых нет в подзаросе.
...
Рейтинг: 0 / 0
План. Джоин с group by и фильтр по коллекции
    #38348367
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем пока вариант - вынести подзапрос в select-лист.
С обобщением группировки до всех полей сложнее поддерживать - там много выражений и есть вероятность, что добавится еще подзапрос с группировкой.
...
Рейтинг: 0 / 0
План. Джоин с group by и фильтр по коллекции
    #38348389
Vint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-,
может можно попробовать взять план без коллекции и зааутлайнить за запросом с коллекцией, я не точно помню доклад Ильи Деева , но там кажется был пример частичной подмены плана.
...
Рейтинг: 0 / 0
План. Джоин с group by и фильтр по коллекции
    #38348407
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Vint,

Не получится. Кстати, эти kokbf'ы вообще "волшебные" - даже элементарное добавление/изменение QB_name меняет алиас у них
...
Рейтинг: 0 / 0
План. Джоин с group by и фильтр по коллекции
    #38348566
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-В общем пока вариант - вынести подзапрос в select-лист.Лично у меня на 11.2.0.3dbms_photoshopСобственно, такая же проблема наблюдается, если "(select 1 from table(sys.odcivarchar2list('x')))" поместить в select list.
...
Рейтинг: 0 / 0
План. Джоин с group by и фильтр по коллекции
    #38348664
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-,

я бы попробовал (в качестве танца с боем бубном по балде ) материализовать коллекцию в темптейбл в факторинге и кардинальностью её пригнуть под плинтус
...
Рейтинг: 0 / 0
План. Джоин с group by и фильтр по коллекции
    #38348692
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshop-2-В общем пока вариант - вынести подзапрос в select-лист.Лично у меня на 11.2.0.3dbms_photoshopСобственно, такая же проблема наблюдается, если "(select 1 from table(sys.odcivarchar2list('x')))" поместить в select list.вроде работает
Код: 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.
with t as (
  select id, dt, gid, data, tt.cn2.num1 c2, tt.cn2.num2 n2
  from (
    select t1.id, t1.dt, t1.gid, t1.data,
       (select sys.KU$_OBJNUMPAIR(count(*), sum(num)) from testco_dtl where id = t1.id) cn2
    from testco t1
  ) tt
)
select *
from t
where t.gid = 2000
   and exists (select 1 from table(sys.odcivarchar2list('x')))
;

Plan hash value: 3864769598
 
--------------------------------------------------------------------------------------------------------
| Id  | Operation                              | Name          | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                       |               |    25 |  5450 |    28   (0)| 00:00:01 |
|   1 |  SORT AGGREGATE                        |               |     1 |     8 |            |          |
|*  2 |   INDEX RANGE SCAN                     | TESTCO_DTL#PK |     3 |    24 |     3   (0)| 00:00:01 |
|*  3 |  FILTER                                |               |       |       |            |          |
|   4 |   TABLE ACCESS BY INDEX ROWID          | TESTCO        |    25 |  5450 |    26   (0)| 00:00:01 |
|*  5 |    INDEX RANGE SCAN                    | TESTCO#GID    |    25 |       |     1   (0)| 00:00:01 |
|   6 |   COLLECTION ITERATOR CONSTRUCTOR FETCH|               |     1 |       |     2   (0)| 00:00:01 |
--------------------------------------------------------------------------------------------------------
 
Predicate Information (identified by operation id):
---------------------------------------------------
 
   2 - access("ID"=:B1)
   3 - filter( EXISTS (SELECT 0 FROM TABLE() "KOKBF$0"))
   5 - access("T1"."GID"=2000)



orawishматериализовать коллекцию в темптейбл в факторинге и кардинальностью её пригнуть под плинтуспробовал, не получилось
Код: 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.
with t as (
  select /*+ push_pred(tt2) */ t1.id, t1.dt, t1.gid, t1.data, tt2.c2, tt2.n2
  from testco t1
  left join (
     select id, count(*) c2, sum(num) n2
     from testco_dtl t2
     group by id
  ) tt2
    on tt2.id=t1.id
),
   s as (select /*+ materialize*/ * from (select column_value x from table(sys.odcivarchar2list('x')) order by 1) where rownum<=10)
select *
from t
where t.gid = 2000
   and exists (select 1 from s)
;

Plan hash value: 3217797662
 
----------------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                                  | Name                        | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     |
----------------------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                           |                             |    25 |  6225 |       |   799   (1)| 00:00:10 |
|   1 |  TEMP TABLE TRANSFORMATION                 |                             |       |       |       |            |          |
|   2 |   LOAD AS SELECT                           | SYS_TEMP_0FD9D6B08_14E799C3 |       |       |       |            |          |
|*  3 |    COUNT STOPKEY                           |                             |       |       |       |            |          |
|   4 |     VIEW                                   |                             |  8168 |    15M|       |    30   (4)| 00:00:01 |
|*  5 |      SORT ORDER BY STOPKEY                 |                             |  8168 | 16336 |       |    30   (4)| 00:00:01 |
|   6 |       COLLECTION ITERATOR CONSTRUCTOR FETCH|                             |  8168 | 16336 |       |    29   (0)| 00:00:01 |
|*  7 |   FILTER                                   |                             |       |       |       |            |          |
|*  8 |    HASH JOIN OUTER                         |                             |    25 |  6225 |       |   766   (1)| 00:00:10 |
|   9 |     TABLE ACCESS BY INDEX ROWID            | TESTCO                      |    25 |  5450 |       |    26   (0)| 00:00:01 |
|* 10 |      INDEX RANGE SCAN                      | TESTCO#GID                  |    25 |       |       |     1   (0)| 00:00:01 |
|  11 |     VIEW                                   |                             |   100K|  3052K|       |   739   (1)| 00:00:09 |
|  12 |      HASH GROUP BY                         |                             |   100K|   787K|  4720K|   739   (1)| 00:00:09 |
|  13 |       INDEX FULL SCAN                      | TESTCO_DTL#PK               |   300K|  2343K|       |   739   (1)| 00:00:09 |
|  14 |    VIEW                                    |                             |    10 |       |       |     3   (0)| 00:00:01 |
|  15 |     TABLE ACCESS FULL                      | SYS_TEMP_0FD9D6B08_14E799C3 |    10 | 20020 |       |     3   (0)| 00:00:01 |
----------------------------------------------------------------------------------------------------------------------------------
 
Predicate Information (identified by operation id):
---------------------------------------------------
 
   3 - filter(ROWNUM<=10)
   5 - filter(ROWNUM<=10)
   7 - filter( EXISTS (SELECT 0 FROM  (SELECT /*+ CACHE_TEMP_TABLE ("T1") */ "C0" "X" FROM 
              "SYS"."SYS_TEMP_0FD9D6B08_14E799C3" "T1") "S"))
   8 - access("TT2"."ID"(+)="T1"."ID")
  10 - access("T1"."GID"=2000)
...
Рейтинг: 0 / 0
План. Джоин с group by и фильтр по коллекции
    #38348881
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
-2-,

можно еще недокументированный precompute_subquery вспомнить:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
with t as (
  select /*+ push_pred(tt2) */ t1.id, t1.dt, t1.gid, t1.data, tt2.c2, tt2.n2
  from testco t1
  left join (
     select id, count(*) c2, sum(num) n2
     from testco_dtl t2
     group by id
  ) tt2
    on tt2.id=t1.id
)
select *
from t
where t.gid = 2000
   and exists (
              select * 
              from dual 
              where dummy in  (select/*+ precompute_subquery */ 'X' from table(sys.odcivarchar2list('x')) where rownum=1)
              )

...
Рейтинг: 0 / 0
План. Джоин с group by и фильтр по коллекции
    #38350593
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-вроде работаетЯ думал "with t" крайне нежелательно менять.
Соответственно я попробовал вынести в select list тот подзапрос, что в exists, чтоб в последствии по нему отфильтровать.
Это по прежнему препятствовало желаемому преобразованию зароса.
...
Рейтинг: 0 / 0
План. Джоин с group by и фильтр по коллекции
    #38640824
Basil_Tsvetkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я так понял это баг, и его не собираются исправлять в 11g?
...
Рейтинг: 0 / 0
План. Джоин с group by и фильтр по коллекции
    #38641043
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil_Tsvetkov,

Счас все сотрудники Оркала ломанутся тебе отвечать о планах на будущее.
...
Рейтинг: 0 / 0
План. Джоин с group by и фильтр по коллекции
    #38641071
ДаВот
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dbms_photoshop, тем более, что планы эти по отношению к БД знает всего одна милая девушка по адресу: 500 оракловская парковая аллея, берега красного дерева, калифорния 94065 и отвечающая за разработку. :)
...
Рейтинг: 0 / 0
План. Джоин с group by и фильтр по коллекции
    #38641098
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
ДаВот,

речь про Марию Колган? так она уже от оптимизатора ушла заниматься ин-мемори опцией
...
Рейтинг: 0 / 0
План. Джоин с group by и фильтр по коллекции
    #38641208
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
План. Джоин с group by и фильтр по коллекции
    #39738882
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
18.3, а воз и ныне там...
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / План. Джоин с group by и фильтр по коллекции
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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