Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Разница между "OR" и "IN ( , ) " / 9 сообщений из 9, страница 1 из 1
11.08.2016, 12:20:57
    #39290242
sossisson
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разница между "OR" и "IN ( , ) "
Есть ли принципиальная разница в sql-конструкциях между (a=1 or a=2 or a=3) и a in (1,2,3)?
Второй вариант значительно короче, а повлияет ли это на скорость выполнения запроса?
...
Рейтинг: 0 / 0
11.08.2016, 12:24:02
    #39290247
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разница между "OR" и "IN ( , ) "
sossissonВторой вариант значительно короче, а повлияет ли это на скорость выполнения запроса?Ты просто посмотри, как он выглядит в предикатах плана. - И вопрос отпадёт.
...
Рейтинг: 0 / 0
11.08.2016, 12:25:16
    #39290249
djeday84
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разница между "OR" и "IN ( , ) "
sossisson,

explain plan for with tt as ( select level id from dual connect by level <=100) select * from tt where id in (1,2,3);

Explained.

Elapsed: 00:00:00.01
@utlxpls

PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Plan hash value: 2403765415

--------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 13 | 2 (0)| 00:00:01 |
|* 1 | VIEW | | 1 | 13 | 2 (0)| 00:00:01 |
|* 2 | CONNECT BY WITHOUT FILTERING| | | | | |
| 3 | FAST DUAL | | 1 | | 2 (0)| 00:00:01 |
--------------------------------------------------------------------------------------

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

1 - filter("ID"=1 OR "ID"=2 OR "ID"=3)
2 - filter(LEVEL<=100)
...
Рейтинг: 0 / 0
11.08.2016, 12:25:51
    #39290250
dbms_photoshop
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разница между "OR" и "IN ( , ) "
sossisson,

Посмотри план с предикатами.
Не забудь еще вариант = any (1,2,3)
...
Рейтинг: 0 / 0
11.08.2016, 12:32:59
    #39290259
sossisson
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разница между "OR" и "IN ( , ) "
Понятно, не имеет вообще никакого значения для интерпретатора как написано, все сводится к OR.
...
Рейтинг: 0 / 0
11.08.2016, 14:31:04
    #39290347
PPA
PPA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разница между "OR" и "IN ( , ) "
sossisson,

Обе конструкции нужны т.к. это может повлиять на выполнимость запроса вообще :)
в in() нельзя засунуть больше 1000 значений ORA-01795: maximum number of expressions in a list is 1000 error
(в 7-ке был лимит еще меньше - 254)
Но если это не критично для сервера и запросы редкие с помощь or можно обойти
это ограничение без дополнительных таблиц:
where a in(1,...1000) or a in(1000,...2000) ...
...
Рейтинг: 0 / 0
11.08.2016, 14:35:51
    #39290352
Вячеслав Любомудров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разница между "OR" и "IN ( , ) "
В этом случае и без OR можно обойтись ( (a, 0) in ((10, 0), (234, 0),...) )
Не говоря уж о том, что пихать даже 100 условий это такое тонкое издевательство как над оптимизатором, так и над сопровождающими
...
Рейтинг: 0 / 0
11.08.2016, 16:01:35
    #39290425
sossisson
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разница между "OR" и "IN ( , ) "
Вячеслав ЛюбомудровВ этом случае и без OR можно обойтись ( (a, 0) in ((10, 0), (234, 0),...) )

О! не знал про такую конструкцию. А что это такое? Где про это можно прочитать? У Кайта было в книге?


Вячеслав Любомудровпихать даже 100 условий это такое тонкое издевательство как над оптимизатором, так и над сопровождающими
Согласен, но иначе не получается.
...
Рейтинг: 0 / 0
11.08.2016, 16:04:39
    #39290431
AlexFF__|
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разница между "OR" и "IN ( , ) "
sossissonВячеслав Любомудровпихать даже 100 условий это такое тонкое издевательство как над оптимизатором, так и над сопровождающими
Согласен, но иначе не получается.
Сделай систему предельно трудной для сопровождения - будешь незаменим!
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Разница между "OR" и "IN ( , ) " / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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