powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как происходит выборка при In и Exists
25 сообщений из 26, страница 1 из 2
Как происходит выборка при In и Exists
    #39858247
Andrey53791
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день. Подскажите пожалуйста, как происходит выборка при In и Exists.

Не совсем понимаю, почему exists работает быстрее. Да он boolean, но по сути, если есть таблица, и в ней id 1,2,3,4,5 то при where main.id in (select test.id from test where id in (1,2) and test.id = main.TestId) он посмотрит 1 строку, поймет что она true, выведет её и пойдет дальше проверять вторую и т.д до конца.
Но разве exists не работает по тому же принципу?
Или разница в том, что exists возвращает строку а не столбец, и на это не тратится доп. время?
...
Рейтинг: 0 / 0
Как происходит выборка при In и Exists
    #39858249
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey53791exists работает быстрееИндуктивные умозаключения не твой конёк.
...
Рейтинг: 0 / 0
Как происходит выборка при In и Exists
    #39858277
Dshedoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А правильно ли я понимаю, что in - это что-то типа case when (id = 1 or id =2 or ... id = 93) then 'TRUE' else 'ELSE' end = 'TRUE'
а exists - это обработка курсором, который ретурнится при нахождение первой же записи?

Select id into q_id from table group by id
select id into w_id from table where id in (1,2) and id = q_id
select id from table where id = w_id

Может кто написать реальный курсор, который отрабатывает как exists, потому что то что написал я - это хрень?
...
Рейтинг: 0 / 0
Как происходит выборка при In и Exists
    #39858314
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dshedoo in - это что-то типа case when (id = 1 or id =2 or ... id = 93) then 'TRUE' else 'ELSE' end = 'TRUE'Если вычеркнуть хрень, то in по списку это or=. in-подзапрос и exists-подзапрос в простейшем случае являются эквивалентными и, будучи конструкциями декларативного языка могут "выполняться" одинаково по-разному.
...
Рейтинг: 0 / 0
Как происходит выборка при In и Exists
    #39858359
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-Если вычеркнуть хрень, то in по списку это or

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
ГЛАВА 13

        ████████████████████████████████████████████████████████████████

        ОПТИМИЗАТОР



                          Плох тот план, который не допускает изменений.
                                            Публилиус Сирус, Максима 469

    IN

        Оптимизатор расширяет  условие, использующее  оператор сравнения
        IN, в эквивалентное условие, использующее операторы равенства  и
        логические операторы OR.  Например, оптимизатор заменяет  первое
        из двух следующих условий на второе:

        ename IN ('SMITH', 'KING', 'JONES')

        ename = 'SMITH' or ename = 'KING' or ename = 'JONES'


.....
stax
...
Рейтинг: 0 / 0
Как происходит выборка при In и Exists
    #39858395
Dshedoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax-2-Если вычеркнуть хрень, то in по списку это or

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
ГЛАВА 13

        ████████████████████████████████████████████████████████████████

        ОПТИМИЗАТОР



                          Плох тот план, который не допускает изменений.
                                            Публилиус Сирус, Максима 469

    IN

        Оптимизатор расширяет  условие, использующее  оператор сравнения
        IN, в эквивалентное условие, использующее операторы равенства  и
        логические операторы OR.  Например, оптимизатор заменяет  первое
        из двух следующих условий на второе:

        ename IN ('SMITH', 'KING', 'JONES')

        ename = 'SMITH' or ename = 'KING' or ename = 'JONES'


.....
stax

Оракл будет обрабатывать каждый OR или на первом TRUE закончит проверку?
(ename = 'SMITH' or ename = 'KING' or ename = 'JONES') = TRUE
или
(ename = 'SMITH') = TRUE or (ename = 'KING' = TRUE) or (ename = 'JONES') = TRUE

Екзист, если я правильно понимаю, довольствуется первым же TRUE.
...
Рейтинг: 0 / 0
Как происходит выборка при In и Exists
    #39858417
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dshedoo,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
SQL> /
select * from dual where 1/decode(dummy,'X',0,1)=1 or 1/decode(dummy,'X',1,0)=1
                          *
ERROR at line 1:
ORA-01476: divisor is equal to zero


SQL> ed
Wrote file afiedt.buf

  1* select * from dual where 1/decode(dummy,'X',1,0)=1  or 1/decode(dummy,'X',0,1)=1
SQL> /

D
-
X



імхо, бывает несколько сложнее (напр трансформация в union all)


....
stax
...
Рейтинг: 0 / 0
Как происходит выборка при In и Exists
    #39858504
Andrey53791
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-2-, почему если они эквивалентны, то разница в выполнении запроса всё-таки есть? Советуют использовать exists, место in.
То что in ищет 1 true, и дальше не проверяет, это я знаю. Но почему советуют использовать exists? Если же он равнозначный в данном случае.
Пожалуйста, поделитесь опытом, если кто-то и правда понимает всю механику exists.
...
Рейтинг: 0 / 0
Как происходит выборка при In и Exists
    #39858509
Melkomyagkii_newbi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey53791,

сравни планы, посмотри какие трансформации перед этим происходили
...
Рейтинг: 0 / 0
Как происходит выборка при In и Exists
    #39858511
Andrey53791
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Andrey53791, P.s то что ищет 1-ое true из in в строке, и переходит к следующей строке и так до конца строк.
...
Рейтинг: 0 / 0
Как происходит выборка при In и Exists
    #39858536
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Начиная с Oracle 8 IN (SELECT...) и EXISTS, как правило, эквивалентны -- используется одинаковый план и т.д. (IN (список значений), естественно, немного не то)
В отличии от NOT IN и NOT EXISTS -- их поведение различается для NULL значений

Для любителей пофантазировать -- почитать, например, про Short-circuit evaluation
...
Рейтинг: 0 / 0
Как происходит выборка при In и Exists
    #39858542
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Andrey53791Советуют использовать exists, место in.кто вообще такое советует?


Andrey53791почему ... разница в выполнении запроса всё-таки есть? ты покажи сначала запросы и их планы
...
Рейтинг: 0 / 0
Как происходит выборка при In и Exists
    #39858544
Andrey53791
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
xtender, в книге автор советовал, про план запросов еще не знаю :(
...
Рейтинг: 0 / 0
Как происходит выборка при In и Exists
    #39858549
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Andrey53791,

что за книга?
...
Рейтинг: 0 / 0
Как происходит выборка при In и Exists
    #39858572
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey53791почему если они эквивалентны, то разница в выполнении запроса всё-таки есть? Возможность декларативной эквивалентности в простейшем случае не запрещает криворуким писать неэквивалентные запросы.

Andrey53791То что in ищет 1 trueВывод сделан по седвежьей услуге Stax? Я уже отметил твою неспособность к индукции.
...
Рейтинг: 0 / 0
Как происходит выборка при In и Exists
    #39858578
Andrey53791
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
xtender,
Oracle Database 11g SQL операторы SQL и программы PL/SQL» Автор Джейсон Прайс.
...
Рейтинг: 0 / 0
Как происходит выборка при In и Exists
    #39858586
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey53791Советуют использовать exists, место in.
Если бы один из этих инструментов был однозначно лучше другого - то второго бы просто не было.
...
Рейтинг: 0 / 0
Как происходит выборка при In и Exists
    #39858657
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Andrey53791xtender,
Oracle Database 11g SQL операторы SQL и программы PL/SQL» Автор Джейсон Прайс.
реально бред
...
Рейтинг: 0 / 0
Как происходит выборка при In и Exists
    #39858659
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Скрин
...
Рейтинг: 0 / 0
Как происходит выборка при In и Exists
    #39859356
Melkomyagkii_newbi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey53791xtender,
Oracle Database 11g SQL операторы SQL и программы PL/SQL» Автор Джейсон Прайс.

сожги ее
...
Рейтинг: 0 / 0
Как происходит выборка при In и Exists
    #39859428
Фотография rf_mail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как происходит выборка при In и Exists
    #39859435
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rf_mail,

в русском переводе тож была статейка об in, exist, not (чуть ли не Кайта), сцылку потерял(недействительна)

там тож об "is very small"

.....
stax
...
Рейтинг: 0 / 0
Как происходит выборка при In и Exists
    #39859437
Фотография rf_mail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как происходит выборка при In и Exists
    #39859445
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rf_mailStax,

помощь из-за океана

я именно о готовом переводе, маленькая статейка

.....
stax
...
Рейтинг: 0 / 0
Как происходит выборка при In и Exists
    #39859458
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
rf_mailAndrey53791,

SQL Exists vs. IN clause
переводчик очередная тупость бурлесона... не читайте его
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как происходит выборка при In и Exists
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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