Разница между использованием IN SELECT и INNER JOIN - PullRequest
0 голосов
/ 29 мая 2018

Я хочу знать, есть ли разница в производительности при использовании

SELECT Table1.*
FROM Table1
WHERE Col1 IN (SELECT Col2 FROM Table2)

AND

SELECT Table1.*
FROM Table1 INNER JOIN Table2
ON Table1.Col1 = Table2.Col2

Ответы [ 3 ]

0 голосов
/ 29 мая 2018

Обычно объединения будут работать быстрее, чем подзапрос.Но иногда производительность может зависеть от данных в таблицах или других факторов.

Вы можете написать свой SQL с помощью JOIN или SUBQUERY, SQL Server всегда преобразует его в план выполнения.

Выможно увидеть больше: https://www.essentialsql.com/what-is-the-difference-between-a-join-and-subquery/

0 голосов
/ 29 мая 2018
SELECT Table1.*
FROM Table1
WHERE Col1 IN (SELECT Col2 FROM Table2)

В этом запросе я не могу использовать ни один столбец таблицы 2. в моем наборе результатов.

Если мне нужен столбец обеих таблиц, я буду использовать INNER JOIN.

SELECT Table1.*
FROM Table1 INNER JOIN Table2
ON Table1.Col1 = Table2.Col2

В отношениях один к одному и согласно требованию INNER JOIN будет работать лучше.

0 голосов
/ 29 мая 2018

Два делают разные вещи.Версия in не будет возвращать дубликаты.inner join возвращает дубликаты.

Часто версия inner join имеет лучшую производительность, хотя это зависит от данных и базы данных.

Я бы обычно использовал exists:

SELECT t1.*
FROM Table1 t1
WHERE EXISTS (SELECT FROM Table2 t2 WHERE t2.Col2 = t1.col1);

Это может напрямую использовать индекс на table2(col2).

...