Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Cammomile Member Откуда: Сообщений: 1214 |
SELECT st.* FROM sys.tables st WHERE NOT EXISTS ( SELECT 1 FROM sys.objects so WHERE so.object_id = st.object_id AND so.name = 'blah') GO SELECT st.* FROM sys.tables st LEFT JOIN sys.objects so ON so.object_id = st.object_id AND so.name = 'blah' WHERE so.object_id IS NULL Экзистс 44% джойн 56%. Это частный случай или экзистс всегда быстрее? |
31 май 17, 17:56 [20528508] Ответить | Цитировать Сообщить модератору |
AlanDenton Member [скрыт] Откуда: Сообщений: 1004 |
Это относительная оценка, а не обсолютная и зависит от статистики. Хоть для обычных таблиц, хоть для системных. К слову sys.tables это тоже самое что и sys.objects + type='U' да и работать будет быстрее. |
31 май 17, 18:01 [20528540] Ответить | Цитировать Сообщить модератору |
AlanDenton Member [скрыт] Откуда: Сообщений: 1004 |
Вот +/- равнозначный запрос:SELECT [name], [object_id], [schema_id] FROM sys.objects WHERE [object_id] != OBJECT_ID('dbo.blah') AND [type] = 'U' |
31 май 17, 18:06 [20528564] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47052 |
Эти два запроса в принципе могут дать разный результат. |
31 май 17, 18:42 [20528679] Ответить | Цитировать Сообщить модератору |
человек_ниоткуда
Guest |
IMHO exist именно в принцыпе быстрее. Т.к. ты точно указываешь оптимизатору, что тебе нужно. Это увеличивает шансы получить более оптимальный план. Более того IN хуже exist в некоторых случаях. |
31 май 17, 19:17 [20528764] Ответить | Цитировать Сообщить модератору |
ппп-пп
Guest |
При определенных ограничениях будут давать одинаковые результаты - но суть вашего ответа в самую точку. |
||
31 май 17, 19:35 [20528802] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
А кто-то спрашивал про IN? |
||
31 май 17, 19:35 [20528803] Ответить | Цитировать Сообщить модератору |
msLex Member Откуда: Сообщений: 8730 |
хмм, а при каких условиях? |
||
31 май 17, 20:44 [20528925] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31783 |
Это же просто пример, а не конкретный запрос с этими таблицами. Т.е. в общем случае заменить EXISTS на LEFT JOIN нельзя (хотя в этом конкретном - можно) |
||||
31 май 17, 21:18 [20529007] Ответить | Цитировать Сообщить модератору |
msLex Member Откуда: Сообщений: 8730 |
|
||||
31 май 17, 22:49 [20529202] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8350 |
Cammomile,
НЕ медленнее. |
||
1 июн 17, 10:58 [20530328] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
Cammomile, достаточно странное сравнение, всё будет зависеть от многих факторов. Для некоторых случаев и EXCLUDE быстрее будет чем оба названных |
1 июн 17, 11:02 [20530349] Ответить | Цитировать Сообщить модератору |
Cammomile Member Откуда: Сообщений: 1214 |
Ну я общую идею имел в виду. |
1 июн 17, 11:20 [20530451] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
общая идею - хрень :) |
||
1 июн 17, 11:30 [20530509] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31783 |
|
||||
1 июн 17, 15:29 [20531780] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47052 |
Без участия LEFT JOIN, так сказать. Тогда LEFT JOIN может вернуть несколько записей для одной из тлевой таблицы, а NOT EXISTS в принципе не может увеличить количество записей. Это в общем случае, разумеется. |
||||
1 июн 17, 15:33 [20531795] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31783 |
Другое дело, что вообще идея заменять NOT EXISTS неправильная. Он специально для этого предназначен, он точно будет работать не хуже, и точно не ошибёшся. |
||
1 июн 17, 15:36 [20531810] Ответить | Цитировать Сообщить модератору |
msLex Member Откуда: Сообщений: 8730 |
так в этом запросе проверяется поле, являющийся ключом JOIN-а, и я не могу представить ситуацию, когда эти два запроса могут вернуть разные данные (даже если все поля в этих "таблицах" не уникальные и могут содержать null) |
||
1 июн 17, 17:05 [20532276] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |