Rendimiento de JOIN versus EXISTS

En términos generales, ¿existe una diferencia de rendimiento entre el uso de UNIR para seleccionar filas frente a una cláusula EXISTS donde? La búsqueda en varios sitios web de preguntas y respuestas sugiere que una unión es más eficiente, pero recuerdo que hace mucho tiempo supe que EXISTS era mejor en Teradata.

Veo otras respuestas de SO, comoesta yesta, pero mi pregunta es específica para Teradata.

Por ejemplo, considere estas dos consultas, que devuelven resultados idénticos:

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

-y-

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

El índice primario (único) en ambas tablas es 'srv_accs_id'. MY_BASE_TABLE es bastante grande (200 millones de filas) y MY_TARGET_TABLE relativamente pequeño (200,000 filas).

Hay una diferencia significativa en los planes EXPLAIN: el primero dice que las dos tablas están unidas"a través de un escaneo RowHash Match" y el segundo dice"Por medio de un escaneo de todas las filas". Ambos dicen que es"Un paso de todos los AMP ÚNETE" y el tiempo total estimado es idéntico (0,32 segundos).

Ambas consultas realizan lo mismo (estoy usando Teradata 13.10).

Un experimento similar para encontrar las no coincidencias que comparan una JUNTA EXTERNA IZQUIERDA con una NULL IS correspondiente donde la subconsulta NOT EXISTS muestra una diferencia de rendimiento:

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

-y-

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 

El segundo plan de consulta es más rápido (2.21 frente a 2.14 segundos, como lo describe EXPLAIN).

Mi ejemplo puede ser demasiado trivial para ver una diferencia; Sólo estoy buscando orientación de codificación.

Respuestas a la pregunta(1)

Su respuesta a la pregunta