Aquí es mi consulta:¿Por qué esta consulta da como resultado un MERGE JOIN CARTESIAN en Oracle?
select count(*)
from email_prod_junc j
inner join trckd_prod t5 on j.trckd_prod_sk = t5.trckd_prod_sk
inner join prod_brnd b on t5.prod_brnd_sk = b.prod_brnd_sk
inner join email e on j.email_sk = e.email_sk
inner join dm_geography_sales_pos_uniq u on (u.emp_sk = e.emp_sk and u.prod_brnd_sk = b.prod_brnd_sk)
La explicar el plan dice:
cartesiana entre DM_GEOGRAPHY_SALES_POS_UNIQ y EMAIL_PROD_JUNC.
No entiendo por qué porque hay una condición de unión para cada tabla.
¿La combinación de unión cartesiana realmente causa problemas de rendimiento o simplemente no espera verla? Si se puede invocar a una de las tablas a las que se une con un pequeño número de filas, combine join cartesian. También la versión de Oracle sería útil ya que los optimizadores se modifican/mejoran mucho de una versión a otra. –
Sí, la consulta tardó más de un minuto en volverse con la unión cartesiana. Una vez que agregué la sugerencia ordenada, regresó en <1s. Este es Oracle 10g. Trckd_Prod y Prod_Brnd son tablas pequeñas, las otras 3 son muy grandes. –
@MarkSherretta: se sabe que el optimizador 10g es escamoso y requiere sugerencias que las versiones posteriores del optimizador no necesitan. 11.1 es bastante sólido - 11.2 mejor. No tengo ninguna experiencia personal con 12, así que no puedo decir cómo está. –