|
|
|
Разница между "OR" и "IN ( , ) "
|
|||
|---|---|---|---|
|
#18+
Есть ли принципиальная разница в sql-конструкциях между (a=1 or a=2 or a=3) и a in (1,2,3)? Второй вариант значительно короче, а повлияет ли это на скорость выполнения запроса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2016, 12:20:57 |
|
||
|
Разница между "OR" и "IN ( , ) "
|
|||
|---|---|---|---|
|
#18+
sossissonВторой вариант значительно короче, а повлияет ли это на скорость выполнения запроса?Ты просто посмотри, как он выглядит в предикатах плана. - И вопрос отпадёт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2016, 12:24:02 |
|
||
|
Разница между "OR" и "IN ( , ) "
|
|||
|---|---|---|---|
|
#18+
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) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2016, 12:25:16 |
|
||
|
Разница между "OR" и "IN ( , ) "
|
|||
|---|---|---|---|
|
#18+
sossisson, Посмотри план с предикатами. Не забудь еще вариант = any (1,2,3) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2016, 12:25:51 |
|
||
|
Разница между "OR" и "IN ( , ) "
|
|||
|---|---|---|---|
|
#18+
Понятно, не имеет вообще никакого значения для интерпретатора как написано, все сводится к OR. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2016, 12:32:59 |
|
||
|
Разница между "OR" и "IN ( , ) "
|
|||
|---|---|---|---|
|
#18+
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) ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2016, 14:31:04 |
|
||
|
Разница между "OR" и "IN ( , ) "
|
|||
|---|---|---|---|
|
#18+
В этом случае и без OR можно обойтись ( (a, 0) in ((10, 0), (234, 0),...) ) Не говоря уж о том, что пихать даже 100 условий это такое тонкое издевательство как над оптимизатором, так и над сопровождающими ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2016, 14:35:51 |
|
||
|
Разница между "OR" и "IN ( , ) "
|
|||
|---|---|---|---|
|
#18+
Вячеслав ЛюбомудровВ этом случае и без OR можно обойтись ( (a, 0) in ((10, 0), (234, 0),...) ) О! не знал про такую конструкцию. А что это такое? Где про это можно прочитать? У Кайта было в книге? Вячеслав Любомудровпихать даже 100 условий это такое тонкое издевательство как над оптимизатором, так и над сопровождающими Согласен, но иначе не получается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2016, 16:01:35 |
|
||
|
Разница между "OR" и "IN ( , ) "
|
|||
|---|---|---|---|
|
#18+
sossissonВячеслав Любомудровпихать даже 100 условий это такое тонкое издевательство как над оптимизатором, так и над сопровождающими Согласен, но иначе не получается. Сделай систему предельно трудной для сопровождения - будешь незаменим! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2016, 16:04:39 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39290249&tid=1887686]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
189ms |
get topic data: |
7ms |
get forum data: |
3ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
| others: | 195ms |
| total: | 456ms |

| 0 / 0 |
