В VS EXISTS:Разница между IN и существуют в Oracle
точка 1:
В: Эффективное, когда суб-запрос содержит меньшее количество строк по сравнению с внешним запросом
существуют: эффективны, когда суб -query содержит большое количество строк по сравнению с внешним запросом. sub-query возвращает TRUE или FALSE. Внешний запрос выполняется один раз, и для каждого значения во внешнем запросе запроса выполняется
, но в последних версиях Oracle они будут, как правило, переписываться оптимизатором, чтобы быть одинаковым, используя тот же план выполнения. (Найден этот пункт в Google). План выполнения такой же, как для IN и EXIST (Наблюдаемые в моем компьютере)
Пункт 2:
Я искал в гугле для дифференциала между NOT IN и NOT EXIST. Но большинство из них предложили, чтобы оба были одинаковыми.
Мои вопросы:
Вопрос 1 (пункт 1): было мое предположение верно? Если оба обработаны одинаково с помощью oracle, тогда мы можем использовать либо IN, либо EXIST в запросах?
Вопрос 2 (пункт 2): Может кто-нибудь объяснить, почему оба они одинаковы?
Посмотрите на http://stackoverflow.com/questions/12896007/oracle-in-vs-exists-difference. Разница также связана с обработкой нулевых значений. – ms32035
Я всегда считал, что EXIST более результативен, поскольку этот оператор подсчитывает записи, в то время как оператор IN перечисляет ряд фактических значений.Первое кажется более простым в обработке: если найдена 1 запись, нет необходимости искать дальше, потому что уже существует логическое предложение EXIST. В то время как с IN, ему может потребоваться пройти всевозможные ценности. Неудивительно, что предложение IN возникло как список точных значений («A», «B», «C»), и в этом контексте предложение EXIST действительно отличается. – tvCa