Совместное и существующее исполнение
Вообще говоря, есть ли разница в производительности между использованием 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).
Мой пример может быть слишком тривиальным, чтобы увидеть разницу; Я просто ищу руководство по кодированию.