|
Как происходит выборка при In и Exists
|
|||
---|---|---|---|
#18+
Добрый день. Подскажите пожалуйста, как происходит выборка при 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 возвращает строку а не столбец, и на это не тратится доп. время? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2019, 08:36 |
|
Как происходит выборка при In и Exists
|
|||
---|---|---|---|
#18+
Andrey53791exists работает быстрееИндуктивные умозаключения не твой конёк. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2019, 08:45 |
|
Как происходит выборка при In и Exists
|
|||
---|---|---|---|
#18+
А правильно ли я понимаю, что 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, потому что то что написал я - это хрень? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2019, 09:44 |
|
Как происходит выборка при In и Exists
|
|||
---|---|---|---|
#18+
Dshedoo in - это что-то типа case when (id = 1 or id =2 or ... id = 93) then 'TRUE' else 'ELSE' end = 'TRUE'Если вычеркнуть хрень, то in по списку это or=. in-подзапрос и exists-подзапрос в простейшем случае являются эквивалентными и, будучи конструкциями декларативного языка могут "выполняться" одинаково по-разному. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2019, 11:01 |
|
Как происходит выборка при In и Exists
|
|||
---|---|---|---|
#18+
-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.
..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2019, 12:11 |
|
Как происходит выборка при In и Exists
|
|||
---|---|---|---|
#18+
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.
..... stax Оракл будет обрабатывать каждый OR или на первом TRUE закончит проверку? (ename = 'SMITH' or ename = 'KING' or ename = 'JONES') = TRUE или (ename = 'SMITH') = TRUE or (ename = 'KING' = TRUE) or (ename = 'JONES') = TRUE Екзист, если я правильно понимаю, довольствуется первым же TRUE. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2019, 13:18 |
|
Как происходит выборка при In и Exists
|
|||
---|---|---|---|
#18+
Dshedoo, Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
імхо, бывает несколько сложнее (напр трансформация в union all) .... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2019, 13:52 |
|
Как происходит выборка при In и Exists
|
|||
---|---|---|---|
#18+
-2-, почему если они эквивалентны, то разница в выполнении запроса всё-таки есть? Советуют использовать exists, место in. То что in ищет 1 true, и дальше не проверяет, это я знаю. Но почему советуют использовать exists? Если же он равнозначный в данном случае. Пожалуйста, поделитесь опытом, если кто-то и правда понимает всю механику exists. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2019, 16:16 |
|
Как происходит выборка при In и Exists
|
|||
---|---|---|---|
#18+
Andrey53791, сравни планы, посмотри какие трансформации перед этим происходили ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2019, 16:22 |
|
Как происходит выборка при In и Exists
|
|||
---|---|---|---|
#18+
Andrey53791, P.s то что ищет 1-ое true из in в строке, и переходит к следующей строке и так до конца строк. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2019, 16:23 |
|
Как происходит выборка при In и Exists
|
|||
---|---|---|---|
#18+
Начиная с Oracle 8 IN (SELECT...) и EXISTS, как правило, эквивалентны -- используется одинаковый план и т.д. (IN (список значений), естественно, немного не то) В отличии от NOT IN и NOT EXISTS -- их поведение различается для NULL значений Для любителей пофантазировать -- почитать, например, про Short-circuit evaluation ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2019, 16:53 |
|
Как происходит выборка при In и Exists
|
|||
---|---|---|---|
#18+
Andrey53791Советуют использовать exists, место in.кто вообще такое советует? Andrey53791почему ... разница в выполнении запроса всё-таки есть? ты покажи сначала запросы и их планы ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2019, 16:58 |
|
Как происходит выборка при In и Exists
|
|||
---|---|---|---|
#18+
xtender, в книге автор советовал, про план запросов еще не знаю :( ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2019, 16:59 |
|
Как происходит выборка при In и Exists
|
|||
---|---|---|---|
#18+
Andrey53791, что за книга? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2019, 17:03 |
|
Как происходит выборка при In и Exists
|
|||
---|---|---|---|
#18+
Andrey53791почему если они эквивалентны, то разница в выполнении запроса всё-таки есть? Возможность декларативной эквивалентности в простейшем случае не запрещает криворуким писать неэквивалентные запросы. Andrey53791То что in ищет 1 trueВывод сделан по седвежьей услуге Stax? Я уже отметил твою неспособность к индукции. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2019, 17:44 |
|
Как происходит выборка при In и Exists
|
|||
---|---|---|---|
#18+
xtender, Oracle Database 11g SQL операторы SQL и программы PL/SQL» Автор Джейсон Прайс. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2019, 17:48 |
|
Как происходит выборка при In и Exists
|
|||
---|---|---|---|
#18+
Andrey53791Советуют использовать exists, место in. Если бы один из этих инструментов был однозначно лучше другого - то второго бы просто не было. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2019, 18:00 |
|
Как происходит выборка при In и Exists
|
|||
---|---|---|---|
#18+
Andrey53791xtender, Oracle Database 11g SQL операторы SQL и программы PL/SQL» Автор Джейсон Прайс. реально бред ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2019, 22:06 |
|
Как происходит выборка при In и Exists
|
|||
---|---|---|---|
#18+
Скрин ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2019, 22:11 |
|
Как происходит выборка при In и Exists
|
|||
---|---|---|---|
#18+
Andrey53791xtender, Oracle Database 11g SQL операторы SQL и программы PL/SQL» Автор Джейсон Прайс. сожги ее ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2019, 14:43 |
|
Как происходит выборка при In и Exists
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2019, 16:16 |
|
Как происходит выборка при In и Exists
|
|||
---|---|---|---|
#18+
rf_mail, в русском переводе тож была статейка об in, exist, not (чуть ли не Кайта), сцылку потерял(недействительна) там тож об "is very small" ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2019, 16:24 |
|
Как происходит выборка при In и Exists
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2019, 16:28 |
|
Как происходит выборка при In и Exists
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2019, 16:46 |
|
Как происходит выборка при In и Exists
|
|||
---|---|---|---|
#18+
rf_mailAndrey53791, SQL Exists vs. IN clause переводчик очередная тупость бурлесона... не читайте его ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2019, 17:12 |
|
|
start [/forum/topic.php?fid=52&msg=39858586&tid=1882108]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
40ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
64ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 165ms |
0 / 0 |