powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Hint leading
26 сообщений из 26, показаны все 2 страниц
Hint leading
    #39551986
cobalt_frog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день,

правильно ли я понимаю, что если в запросе всего две таблицы tst1 и tst2, то хинт leading будет одинаково, что при указании leading(tst1 tst2), что при указании leading(tst2 tst1)?
заранее всех благодарю
...
Рейтинг: 0 / 0
Hint leading
    #39551989
cobalt_frogleading будет одинаковоСлово leading всегда пишется одинаково.
...
Рейтинг: 0 / 0
Hint leading
    #39552059
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
cobalt_frog,

нет, планы должны получаться разные (если без swap_join_inputs)
...
Рейтинг: 0 / 0
Hint leading
    #39552061
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cobalt_frog,

что значит одинаково?
Код: 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.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
  1* select /*+ leading (d e) */ dname,ename from emp e,dept d where d.deptno=e.deptno
SQL> /

DNAME          ENAME
-------------- ----------
ACCOUNTING     CLARK
ACCOUNTING     KING
ACCOUNTING     MILLER
RESEARCH       SMITH
RESEARCH       JONES
RESEARCH       SCOTT
RESEARCH       ADAMS
RESEARCH       FORD
SALES          ALLEN
SALES          WARD
SALES          MARTIN
SALES          BLAKE
SALES          TURNER
SALES          JAMES

14 rows selected.


Execution Plan
----------------------------------------------------------
Plan hash value: 1371801182

---------------------------------------------------------------------------------------------
| Id  | Operation                    | Name         | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT             |              |    14 |   308 |     4   (0)| 00:00:01 |
|   1 |  NESTED LOOPS                |              |       |       |            |          |
|   2 |   NESTED LOOPS               |              |    14 |   308 |     4   (0)| 00:00:01 |
|   3 |    TABLE ACCESS FULL         | DEPT         |     4 |    52 |     3   (0)| 00:00:01 |
|*  4 |    INDEX RANGE SCAN          | I$EMP$DEPTNO |     5 |       |     1   (0)| 00:00:01 |
|   5 |   TABLE ACCESS BY INDEX ROWID| EMP          |     4 |    36 |     1   (0)| 00:00:01 |
---------------------------------------------------------------------------------------------

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

   4 - access("D"."DEPTNO"="E"."DEPTNO")

SQL> ed
Wrote file afiedt.buf

  1* select /*+ leading (e d) */ dname,ename from emp e,dept d where d.deptno=e.deptno
SQL> /

DNAME          ENAME
-------------- ----------
ACCOUNTING     CLARK
ACCOUNTING     KING
ACCOUNTING     MILLER
RESEARCH       SMITH
RESEARCH       JONES
RESEARCH       SCOTT
RESEARCH       ADAMS
RESEARCH       FORD
SALES          ALLEN
SALES          WARD
SALES          MARTIN
SALES          BLAKE
SALES          TURNER
SALES          JAMES

14 rows selected.


Execution Plan
----------------------------------------------------------
Plan hash value: 2456909366

---------------------------------------------------------------------------------------------
| Id  | Operation                    | Name         | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT             |              |    14 |   308 |     5  (20)| 00:00:01 |
|   1 |  MERGE JOIN                  |              |    14 |   308 |     5  (20)| 00:00:01 |
|   2 |   TABLE ACCESS BY INDEX ROWID| EMP          |    14 |   126 |     1   (0)| 00:00:01 |
|   3 |    INDEX FULL SCAN           | I$EMP$DEPTNO |    14 |       |     1   (0)| 00:00:01 |
|*  4 |   SORT JOIN                  |              |     4 |    52 |     4  (25)| 00:00:01 |
|   5 |    TABLE ACCESS FULL         | DEPT         |     4 |    52 |     3   (0)| 00:00:01 |
---------------------------------------------------------------------------------------------

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

   4 - access("D"."DEPTNO"="E"."DEPTNO")
       filter("D"."DEPTNO"="E"."DEPTNO")

SQL>



....
stax
...
Рейтинг: 0 / 0
Hint leading
    #39552222
cobalt_frog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax,

я имел ввиду одинаковые планы показывать.
...
Рейтинг: 0 / 0
Hint leading
    #39552224
cobalt_frog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax,

спасибо за ответ. А можно узнать почему они разные? или ссылку.
...
Рейтинг: 0 / 0
Hint leading
    #39552226
cobalt_frog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
нет ни у кого случайно ссылки, гед подробно расписано как формируется план и по каким правилам?
...
Рейтинг: 0 / 0
Hint leading
    #39552241
и мне!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А может у кого-нибудь есть еще ссылочка, где подробно расписано, как программировать? Очень надо, заранее спасибо.
...
Рейтинг: 0 / 0
Hint leading
    #39552248
тоже хочу
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
нет ни у кого случайно ссылки, гед подробно расписано как открыть таблицу оракла в экселе?
...
Рейтинг: 0 / 0
Hint leading
    #39552297
cobalt_frog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть такой запрос:

Код: plsql
1.
2.
3.
4.
5.
select *
  from  t1,t2
 where  t1.id = t2.id
   and  t1.name like '%иван%'
   and  t1.last_name like '%иванов%'


1. Сначала будут отобраны данные по условиям на лайк и потом произойдет соединение таблиц или наоборот?
2. Зависит ли ответ на первый вопрос от типа условий(=,!=,like и т.д.) по которым отбираются записи?
3. Зависит ли ответ на первый вопрос от типа соединения(nl,merge,hash)?

если можно пришлите плз ссылки.
...
Рейтинг: 0 / 0
Hint leading
    #39552305
Valergrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cobalt_frogнет ни у кого случайно ссылки, гед подробно расписано как формируется план и по каким правилам?

Достаточно подробно - здесь
https://docs.oracle.com/database/121/TGSQL/title.htm

Но для начала возможно лучше поискать где-нибудь где на более хайлевельном уровне.
...
Рейтинг: 0 / 0
Hint leading
    #39552321
cobalt_frog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valergrad,

от за это преогромнейшее вам спасибо.
...
Рейтинг: 0 / 0
Hint leading
    #39552333
Valergrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cobalt_frogесть такой запрос:

Код: plsql
1.
2.
3.
4.
5.
select *
  from  t1,t2
 where  t1.id = t2.id
   and  t1.name like '%иван%'
   and  t1.last_name like '%иванов%'


1. Сначала будут отобраны данные по условиям на лайк и потом произойдет соединение таблиц или наоборот?
2. Зависит ли ответ на первый вопрос от типа условий(=,!=,like и т.д.) по которым отбираются записи?
3. Зависит ли ответ на первый вопрос от типа соединения(nl,merge,hash)?

если можно пришлите плз ссылки.

Общее правило - оракл старается любой фильтр использовать максимально рано, как это только возможно. Так что они, скорее всего, пройдут до джойна.
Чтобы убедиться в этом наверняка, вам нужно сделать explain plan и смотреть поля access predicates/filter predicates.
...
Рейтинг: 0 / 0
Hint leading
    #39552340
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cobalt_frogнет ни у кого случайно ссылки, гед подробно расписано как формируется план и по каким правилам?Джонатан Льюис "Основы стоимостной оптимизации". Есть на английском, есть на русском.
...
Рейтинг: 0 / 0
Hint leading
    #39552345
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ValergradТак что они, скорее всего, пройдут до джойна.Это смотря какой джойн. Если hash, то да. Если nested loops или merge join, то все зависит от некоторых факторов, в конечном счете - от выбранного метода доступа к таблице.
...
Рейтинг: 0 / 0
Hint leading
    #39552360
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKadValergradТак что они, скорее всего, пройдут до джойна.Это смотря какой джойн. Если hash, то да. Если nested loops или merge join, то все зависит от некоторых факторов, в конечном счете - от выбранного метода доступа к таблице.Интересно про какие факторы речь.

Есть две эвристики, которые реализованы во всех ключевых СУБД.
Код: plaintext
1.
1. Perform selection as early as possible.
2. Perform projections as early as possible.

Первая значит применять фильтр как можно раньше. В том числе до соединения, если это логически возможно.
Вторая значит отбрасывать ненужные столбцы как можно раньше.
...
Рейтинг: 0 / 0
Hint leading
    #39552361
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKadValergradТак что они, скорее всего, пройдут до джойна.Это смотря какой джойн.
Да и от системы немножко зависит - к примеру, storage indexes могут вносить некоторое разнообразие в монотонность бытия...
...
Рейтинг: 0 / 0
Hint leading
    #39552380
Фотография AlexFF__|
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopЕсть две эвристики, которые реализованы во всех ключевых СУБД.
Код: plaintext
1.
1. Perform selection as early as possible.
2. Perform projections as early as possible.

Первая значит применять фильтр как можно раньше. В том числе до соединения, если это логически возможно.
Вторая значит отбрасывать ненужные столбцы как можно раньше.
Любите вы все обобщать...
И какая из вышеуказанных эвристик сработала?
Код: 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.
create table t1 as select rownum id, 'иван' name, 'иванов' last_name from dual connect by rownum <= 1000;
create index idx_t1_id on t1(id);
create table t2 as select 1 id from dual;

begin
  DBMS_STATS.GATHER_TABLE_STATS(
    ownname          => user,
    tabname          => 'T1',
    estimate_percent => 100,
    cascade          => true );
  DBMS_STATS.GATHER_TABLE_STATS(
    ownname          => user,
    tabname          => 'T2',
    estimate_percent => 100,
    cascade          => true );
end;
/

select *
  from  t1,t2
 where  t1.id = t2.id
   and  t1.name like '%иван%'
   and  t1.last_name like '%иванов%';

-------------------------------------------------------------------------------------------
| Id  | Operation                    | Name      | E-Rows |E-Bytes| Cost (%CPU)| E-Time   |
-------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT             |           |        |       |     4 (100)|          |
|   1 |  NESTED LOOPS                |           |      1 |    29 |     4   (0)| 00:00:01 |
|   2 |   NESTED LOOPS               |           |      1 |    29 |     4   (0)| 00:00:01 |
|   3 |    TABLE ACCESS FULL         | T2        |      1 |     3 |     2   (0)| 00:00:01 |
|*  4 |    INDEX RANGE SCAN          | IDX_T1_ID |      1 |       |     1   (0)| 00:00:01 |
|*  5 |   TABLE ACCESS BY INDEX ROWID| T1        |      1 |    26 |     2   (0)| 00:00:01 |
-------------------------------------------------------------------------------------------


Правило одно, стоимость должна быть минимальной, а фильтры, усечения и прочее лишь способы, на которые не делается акцент.
...
Рейтинг: 0 / 0
Hint leading
    #39552393
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexFF__|,

Согласен, уточнение про стоимость имеет смысл.
...
Рейтинг: 0 / 0
Hint leading
    #39552397
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
dbms_photoshop
Код: plaintext
1. Perform selection as early as possible.
это правда, безотносительно методов джойна и прочего (хотя я бы selection поменял на filter, хотя, наверное, это не важно)

dbms_photoshop
Код: plaintext
1.
2. Perform projections as early as possible...
Вторая значит отбрасывать ненужные столбцы как можно раньше.
а тут, как мне кажется, несколько сомнительное/неточное правило, т.к. слишком раннее получение всех нужных столбцов, которые при этом не нужны для фильтров, приводит к увеличению потребления памяти
...
Рейтинг: 0 / 0
Hint leading
    #39552398
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
AlexFF__|Правило одно, стоимость должна быть минимальнойк сожалению, есть случаи когда эвристические трансформации отрабатывает раньше стоимостных, что приводит к невозможности получения более дешевого плана
...
Рейтинг: 0 / 0
Hint leading
    #39552404
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
AlexFF__|Правило одно, стоимость должна быть минимальной, а фильтры, усечения и прочее лишь способы, на которые не делается акцент.так стоимость от них зависит...
AlexFF__|И какая из вышеуказанных эвристик сработала?эвристики работают для любых планов...
...
Рейтинг: 0 / 0
Hint leading
    #39552460
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtenderя бы selection поменял на filter, хотя, наверное, это не важно

...несколько сомнительное/неточное правило, т.к. слишком раннее получение всех нужных столбцов
1. Не надо менять на "фильтр" - все-таки есть определенная разница между селекцией (отбором) и фильтрацией (просеиванием отобранного).
2. Тут непонятно. Алекс говорит об отсеивании заведомо ненужных атрибутов, что, в свою очередь, делает возможным финты ушами вроде table elimination, а не о раннем формировании полного набора атрибутов.
...
Рейтинг: 0 / 0
Hint leading
    #39552595
Valergrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как обычно - профи ушли в дебри которые новичку даже близко и не нужны :)
В общем и целом - нужно научиться определять по плану порядок операций , а затем смотрите в плане для каждого предиката на каком степе он был применен. В большинстве случаев если предикат используется как access - это хорошо, как filter он должен использоваться только если нельзя использовать как access.
...
Рейтинг: 0 / 0
Hint leading
    #39552641
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
andrey_anonymous1. Не надо менять на "фильтр" - все-таки есть определенная разница между селекцией (отбором) и фильтрацией (просеиванием отобранного).так о том и речь, что важно как можно раньше не выбрать данные, а отсеять ненужные(a la reduce в MapReduce). Но это вопрос терминологии, потому не так важно...

andrey_anonymous2. Тут непонятно. Алекс говорит об отсеивании заведомо ненужных атрибутов, что, в свою очередь, делает возможным финты ушами вроде table elimination, а не о раннем формировании полного набора атрибутов.join elimination - это никак не "Perform projections as early as possible". Выкинутый шаг невозможно "перформить" раньше или позже...
...
Рейтинг: 0 / 0
Hint leading
    #39552664
cobalt_frog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valergrad,

Почему же дебри?) все предельно понятно было и раньше, но на интуитивном уровне, а тут развернутый ответ на все вопросы.

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


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