Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Разница мужду запросом с Exists и Join  [new]
NikolaiLomako
Member

Откуда:
Сообщений: 1
Вот 2 запроса, которые выдают одинаковыую информацию, построенные на базе данных Adventure 2014. Логически понятно, что запросы работают по-раному, и в одном случам, когда запесей очень много, то Join будет дольше выполняться, но интересуют мелкие нюансы, даже в конкретном примере, какой запрос лучше? И по каким критериям определять, лучше Exists, IN либо Join.

Буду благодарен любому ответу.


SELECT DISTINCT a.ProductID
FROM Purchasing.PurchaseOrderDetail a
INNER JOIN Sales.SalesOrderDetail b
ON a.ProductID = b.ProductID
WHERE a.UnitPrice < 20
AND b.UnitPriceDiscount > 0
ORDER BY ProductID
GO



SELECT DISTINCT a.ProductID
FROM Purchasing.PurchaseOrderDetail a
WHERE a.UnitPrice < 20
AND
EXISTS
(
SELECT b.ProductID
FROM Sales.SalesOrderDetail b
WHERE b.UnitPriceDiscount > 0
AND a.ProductID = b.ProductID
)
ORDER BY a.ProductID
26 фев 16, 13:31    [18867126]     Ответить | Цитировать Сообщить модератору
 Re: Разница мужду запросом с Exists и Join  [new]
Glory
Member

Откуда:
Сообщений: 104751
NikolaiLomako
Логически понятно, что запросы работают по-раному, и в одном случам, когда запесей очень много, то Join будет дольше выполняться, но интересуют мелкие нюансы, даже в конкретном примере, какой запрос лучше?

Ничего, что запросы могут вернуть разные результаты ?
26 фев 16, 13:32    [18867137]     Ответить | Цитировать Сообщить модератору
 Re: Разница мужду запросом с Exists и Join  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8350
NikolaiLomako
И по каким критериям определять, лучше Exists, IN либо Join.


Я бы на скорость выполнения смотрел и на количество чтений.
26 фев 16, 13:33    [18867140]     Ответить | Цитировать Сообщить модератору
 Re: Разница мужду запросом с Exists и Join  [new]
sdfsfsfsf
Guest
NikolaiLomako,

http://sqlserverplanet.com/tsql/comparing-exists-vs-left-join-where-not-null
http://sqlperformance.com/2012/12/t-sql-queries/left-anti-semi-join
26 фев 16, 13:38    [18867161]     Ответить | Цитировать Сообщить модератору
 Re: Разница мужду запросом с Exists и Join  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
sdfsfsfsf,

IN эквивалентен в плане с Exists кроме случаев NOT IN и NOT Exists с NULL значениями в поле, так что EXISTS выгоднее.
JOIN и EXISTs сравнивать не очень корректно, хотя и могут повторить друг друга
26 фев 16, 13:41    [18867184]     Ответить | Цитировать Сообщить модератору
 Re: Разница мужду запросом с Exists и Join  [new]
sdfsfsfsf
Guest
TaPaK
sdfsfsfsf,

IN эквивалентен в плане с Exists кроме случаев NOT IN и NOT Exists с NULL значениями в поле, так что EXISTS выгоднее.
JOIN и EXISTs сравнивать не очень корректно, хотя и могут повторить друг друга


еще как могут. особенно с учетом того, что в БД есть unique key, которые прекрасно могут гарантировать уникальность и отсутствие дубликатов.
26 фев 16, 15:08    [18867855]     Ответить | Цитировать Сообщить модератору
 Re: Разница мужду запросом с Exists и Join  [new]
iap
Member

Откуда: Москва
Сообщений: 47052
sdfsfsfsf
в БД есть unique key, которые прекрасно могут гарантировать уникальность и отсутствие дубликатов
В какой БД? В любой?
26 фев 16, 15:10    [18867865]     Ответить | Цитировать Сообщить модератору
 Re: Разница мужду запросом с Exists и Join  [new]
sdfsfsfsf
Guest
iap
sdfsfsfsf
в БД есть unique key, которые прекрасно могут гарантировать уникальность и отсутствие дубликатов
В какой БД? В любой?


а ну да конечно мы сравниваем эффективность конструкций в сферической БД :-). В сферической БД победит конь.
26 фев 16, 15:13    [18867887]     Ответить | Цитировать Сообщить модератору
 Re: Разница мужду запросом с Exists и Join  [new]
Naomin papa
Member

Откуда:
Сообщений: 5
Glory
Ничего, что запросы могут вернуть разные результаты ?

Как это?
28 фев 16, 23:09    [18875199]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить