powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / connect by + distinct
11 сообщений из 36, страница 2 из 2
connect by + distinct
    #39496641
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
xtenderStax,

Вместо autotrace делай dbms_xplan.display_cursor c параметром +projection - имхо по плану у тебя функция вызывается только после hash unique на шаге View.поправка: функция stax_log отрабатывает у тебя на шагах HASH UNIQUE:

Stax
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
----------------------------------------------------------------------------------
| Id  | Operation                 | Name | Rows  | Bytes | Cost (%CPU)| Time     |
----------------------------------------------------------------------------------
|   0 | SELECT STATEMENT          |      |     4 |   104 |     5  (20)| 00:00:01 |
|*  1 |  CONNECT BY WITH FILTERING|      |       |       |            |          |
|   2 |   VIEW                    | TV   |     1 |    26 |     5  (20)| 00:00:01 |
|   3 |    HASH UNIQUE            |      |     1 |     9 |     5  (20)| 00:00:01 | -- выполняется 1 раз stax_log для возвращенной строки
|*  4 |     TABLE ACCESS FULL     | T    |     1 |     9 |     4   (0)| 00:00:01 | -- отсюда по фильтру возвращается только 1 строка
|   5 |   VIEW                    | TV   |     4 |   104 |     5  (20)| 00:00:01 |
|   6 |    HASH UNIQUE            |      |     4 |    36 |     5  (20)| 00:00:01 | -- а вот тут то и вызывается 6 раз для 6 строк
|*  7 |     HASH JOIN             |      |       |       |            |          | -- здесь у тебя возвращается 6 строк из таблицы
|   8 |      CONNECT BY PUMP      |      |       |       |            |          | -- функция stax_log НЕ выполняется еще
|   9 |      TABLE ACCESS FULL    | T    |     4 |    36 |     4   (0)| 00:00:01 |
----------------------------------------------------------------------------------

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

   1 - access("CH"=PRIOR "ID_REF")
   4 - filter("CH" IS NULL)
   7 - access("CH"=PRIOR "ID_REF")
...
Рейтинг: 0 / 0
connect by + distinct
    #39496643
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Staxесли БЫ select distinct вычислялся на каждом шаге то и время в client_info БЫ поплылос чего бы оно поплыло, если у тебя dbms_lock только в stax_log2, которая вызывается уже после?
...
Рейтинг: 0 / 0
connect by + distinct
    #39496649
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtenderStax,

Вместо autotrace делай dbms_xplan.display_cursor c параметром +projection - имхо по плану у тебя функция вызывается только после hash unique на шаге 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.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
SQL> SELECT * FROM TABLE(dbms_xplan.display_cursor('5pfdx35nqnqx1',0,'+PROJECTION'));

PLAN_TABLE_OUTPUT
---------------------------------------------------------------------------------------------------
SQL_ID  5pfdx35nqnqx1, child number 0
-------------------------------------
select /* stax_test3 */ id_ref,ch,level,stax_log2(id_ref) sss from tv
start with ch is null connect by ch=prior id_ref

Plan hash value: 2254541599

----------------------------------------------------------------------------------
| Id  | Operation                 | Name | Rows  | Bytes | Cost (%CPU)| Time     |
----------------------------------------------------------------------------------
|   0 | SELECT STATEMENT          |      |       |       |     5 (100)|          |
|*  1 |  CONNECT BY WITH FILTERING|      |       |       |            |          |
|   2 |   VIEW                    | TV   |     1 |    26 |     5  (20)| 00:00:01 |
|   3 |    HASH UNIQUE            |      |     1 |     9 |     5  (20)| 00:00:01 |
|*  4 |     TABLE ACCESS FULL     | T    |     1 |     9 |     4   (0)| 00:00:01 |
|   5 |   VIEW                    | TV   |     4 |   104 |     5  (20)| 00:00:01 |
|   6 |    HASH UNIQUE            |      |     4 |    36 |     5  (20)| 00:00:01 |
|*  7 |     HASH JOIN             |      |       |       |            |          |
|   8 |      CONNECT BY PUMP      |      |       |       |            |          |
|   9 |      TABLE ACCESS FULL    | T    |     4 |    36 |     4   (0)| 00:00:01 |
----------------------------------------------------------------------------------

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

   1 - access("CH"=PRIOR NULL)
   4 - filter("CH" IS NULL)
   7 - access("CH"=PRIOR NULL)

Column Projection Information (identified by operation id):
-----------------------------------------------------------

   1 - "CH"[NUMBER,22], "ID_REF"[NUMBER,22], PRIOR NULL[22], LEVEL[4]
   2 - "ID_REF"[NUMBER,22], "CH"[NUMBER,22]
   3 - "ID_REF"[NUMBER,22], "CH"[NUMBER,22], "N"[VARCHAR2,2],
       "STAX_LOG"("ID_REF")[4000]
   4 - "ID_REF"[NUMBER,22], "CH"[NUMBER,22], "N"[VARCHAR2,2]
   5 - "ID_REF"[NUMBER,22], "CH"[NUMBER,22]
   6 - "ID_REF"[NUMBER,22], "CH"[NUMBER,22], "N"[VARCHAR2,2],
       "STAX_LOG"("ID_REF")[4000]
   7 - (#keys=1) "ID_REF"[NUMBER,22], "CH"[NUMBER,22], "N"[VARCHAR2,2],
       PRIOR NULL[22]
   8 - PRIOR NULL[22]
   9 - "ID_REF"[NUMBER,22], "CH"[NUMBER,22], "N"[VARCHAR2,2]


45 rows selected.



я так понимаю "STAX_LOG"("ID_REF")[4000] относится не ко VIEW


.....
stax
...
Рейтинг: 0 / 0
connect by + distinct
    #39496661
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Stax,

20682507
...
Рейтинг: 0 / 0
connect by + distinct
    #39496678
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtender,

по крупному
меня интересует не когда ф-ция выполняется,
а когда выполняется distinct
она (ф-ция) ж не может быть выполнена после distinct

stax_log2 выполняэтся на каком етапе? SELECT STATEMENT?

ps
если придумываю несколько другое, оракля меняет план,
который меня устраивает (один distinct)

.....
stax
...
Рейтинг: 0 / 0
connect by + distinct
    #39496681
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtender,

6 | HASH UNIQUE | | 4 | 36 | 5 (20)| 00:00:01 | -- а вот тут то и вызывается 6 раз для 6 строк

главный вопрос
6 за один вызов, или 2 раза по три?

.....
stax
...
Рейтинг: 0 / 0
connect by + distinct
    #39496682
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Staxа когда выполняется distinct тебе уже несколько раз было сказано - зависит от плана, в приведенном выше плане - выполняется на каждом шаге.
...
Рейтинг: 0 / 0
connect by + distinct
    #39496686
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Staxглавный вопрос
6 за один вызов, или 2 раза по три?omg... а как сам думаешь? получи нормальный трейс с allstats last и глянь starts
...
Рейтинг: 0 / 0
connect by + distinct
    #39496732
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtenderStaxглавный вопрос
6 за один вызов, или 2 раза по три?omg... а как сам думаешь? получи нормальный трейс с allstats last и глянь starts

спасибо за starts

почему 3, пока не понимаю, ожидал 2, мож 2=(3-1), буду думать(експерементировать)

главное что не один

.....
stax
...
Рейтинг: 0 / 0
connect by + distinct
    #39496745
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Staxпочему 3, пока не понимаю
ну надо же как-то понять, что на 4-й итерации нечего возвращать...
...
Рейтинг: 0 / 0
connect by + distinct
    #39496770
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtenderStaxпочему 3, пока не понимаю
ну надо же как-то понять, что на 4-й итерации нечего возвращать...

спасибо
ясно
типа больше уровней нет

я подозревал что L-1

.....
stax
...
Рейтинг: 0 / 0
11 сообщений из 36, страница 2 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / connect by + distinct
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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