IN vs. JOIN с большими наборами строк - PullRequest
28 голосов
/ 16 июня 2009

Я хочу выбрать строки в таблице, где первичный ключ находится в другой таблице. Я не уверен, должен ли я использовать оператор JOIN или IN в SQL Server 2005. Есть ли существенная разница в производительности между этими двумя запросами SQL с большим набором данных (т.е. миллионами строк)?

SELECT *
FROM a
WHERE a.c IN (SELECT d FROM b)

SELECT a.*
FROM a JOIN b ON a.c = b.d

Ответы [ 12 ]

0 голосов
/ 16 июня 2009

Обычно считается, что объединение будет более эффективным, чем подзапрос IN; однако оптимизатор SQL * Server обычно не приводит к заметной разнице в производительности. Несмотря на это, вероятно, лучше всего кодировать, используя условие соединения, чтобы поддерживать ваши стандарты согласованными. Кроме того, если ваши данные и код когда-либо необходимо будет перенести в будущем, ядро ​​базы данных, возможно, не будет таким щадящим (например, использование соединения вместо подзапроса IN имеет огромное значение в MySql).

0 голосов
/ 16 июня 2009

Я бы использовал объединение, держу пари, что это будет намного быстрее, чем IN. Это предполагает, что, конечно, определены первичные ключи, что позволяет индексации значительно ускорить процесс.

...