Совместное и существующее исполнение

Вообще говоря, есть ли разница в производительности между использованием JOIN для выбора строк и предложением EXISTS where? Поиск различных вопросов и ответовВеб-сайты предполагают, что объединение более эффективно, но я вспоминаю, как давно узнал, что EXISTS был лучше в Teradata.

Я вижу другие ответы SO, какэтот а такжеэтот, но мой вопрос специфичен для Teradata.

Например, рассмотрим эти два запроса, которые возвращают идентичные результаты:

select   svc.ltv_scr, count(*) as freq
from     MY_BASE_TABLE svc
join     MY_TARGET_TABLE x
on       x.srv_accs_id=svc.srv_accs_id
group by 1
order by 1

-а также-

select   svc.ltv_scr, count(*) as freq
from     MY_BASE_TABLE svc
where exists(
    select 1
    from   MY_TARGET_TABLE x
    where  x.srv_accs_id=svc.srv_accs_id)
group by 1
order by 1

Основной индекс (уникальный) для обеих таблиц:srv_accs_id», MY_BASE_TABLE довольно большой (200 миллионов строк), а MY_TARGET_TABLE относительно небольшой (200 000 строк).

В планах EXPLAIN есть одно существенное отличие: первая говорит, что две таблицы объединены "путем сканирования совпадений RowHash " а второй говорит "путем сканирования всех строк ", Оба говорят, что этовсе-AMPs JOIN шаг " и общее расчетное время идентично (0,32 секунды).

Оба запроса выполняются одинаково (ям с использованием Teradata 13.10).

Аналогичный эксперимент по поиску несоответствий, сравнивающих LEFT OUTER JOIN с соответствующим предложением IS NULL where для подзапроса NOT EXISTS, показывает разницу в производительности:

select   svc.ltv_scr, count(*) as freq
from     MY_BASE_TABLE svc
left outer join MY_TARGET_TABLE x
on       x.srv_accs_id=svc.srv_accs_id
where    x.srv_accs_id is null
group by 1
order by 1

-а также-

select   svc.ltv_scr, count(*) as freq
from     MY_BASE_TABLE svc
where not exists(
    select 1
    from   MY_TARGET_TABLE x
    where  x.srv_accs_id=svc.srv_accs_id)
group by 1
order by 1 

Второй план запроса работает быстрее (2,21 против 2,14 секунды, как описано в EXPLAIN).

Мой пример может быть слишком тривиальным, чтобы увидеть разницу; Я'Я просто ищу руководство по кодированию.

Ответы на вопрос(1)

Ваш ответ на вопрос