У меня есть три таблицы, которые мне нужны, чтобы JOIN
получить значения из двух столбцов. Эти столбцы: GRN_STATUS
и STATUS
Я написал некоторый SQL, который дает желаемый результат, но мне сообщили, что использование IN
очень неэффективно и вместо этого я должен использовать EXISTS
.Самый эффективный SQL-запрос: существует vs IN
Мне просто интересно, это правда в моей ситуации? и каково было бы решение с использованием EXISTS
вместо IN
?
SQL:
SELECT c.GRN_STATUS, a.STATUS
FROM
TableA a
INNER JOIN
TableB b
ON a.ORD_NO = b.ORD_NO
AND a.COMPANY_ID = b.COMPANY_ID
INNER JOIN
TableC c
ON b.GRN_NO = c.GRN_NO
AND b.COMPANY_ID = c.COMPANY_ID
AND a.STATUS IN ('B', 'C', 'D', 'E')
AND c.GRN_STATUS = 'A';
В зависимости от размера списка для проверки. В вашем случае «IN» и «EXSITS» должны иметь одинаковую производительность. –
Я думаю, что ответ на часть эффективности вашего вопроса может быть специфичным для базы данных. Как вы сказали, какую базу данных вы используете? –
Предполагая, что список может стать очень большим, будет ли «EXSITS' преформа лучше? – Johntk