Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Outer Join - View (https://www.clubdelphi.com/foros/showthread.php?t=15856)

joan 08-11-2004 01:19:41

Outer Join - View
 
Si alguien quiere perder un poco de tiempo y analizar una situacion
realmente extraña, aqui os la propongo.

Porque una query utilizando un OUTER JOIN tarda varios minutos y
la misma query pero creando una VIEW para simplificarla y utilizando
otra vez el OUTER JOIN nos da el resultado en muy pocos segundos!!
Código SQL [-]
  
QUERY1
=======
SELECT DISTINCT c.ref_num2, c.id_sup2, p.price
FROM CROSS_LIST c, CROSS_LIST c2 LEFT OUTER JOIN prices p ON c2.ref_num2=p.ref_num AND c2.id_sup2=p.id_sup 
WHERE c.ref_num='SB-00184R'
AND c.id_sup=534
AND c.ref_num2=c2.ref_num
AND c.id_sup2=c2.id_sup
 
PLAN1
=====
PLAN SORT (JOIN (JOIN (C2 NATURAL,P INDEX (PK_PRICES)),C INDEX (PK_CROSS_LIST)))
 
VIEW1
=====
CREATE VIEW CROSS_LIST_IT(
REF_NUM,
ID_SUP,
REF_NUM2,
ID_SUP2)
AS
SELECT c.ref_num, c.id_sup, c2.ref_num2, c2.id_sup2
FROM CROSS_LIST c, CROSS_LIST c2
WHERE c.ref_num2=c2.ref_num
AND c.id_sup2=c2.id_sup
 
QUERY2
======
 
select distinct c.ref_num2, c.id_sup2, p.price
from
CROSS_LIST_IT c LEFT OUTER JOIN prices p ON p.id_sup=c.id_sup2 AND p.ref_num=c.ref_num2 
WHERE c.ref_num='SB-00184R'
AND c.id_sup=534
 
PLAN2
=====
PLAN SORT (JOIN (JOIN (C C INDEX (PK_CROSS_LIST),C C2 INDEX (PK_CROSS_LIST)),P INDEX (PK_PRICES)))

CONCLUSION
===========

No entiendo porque en lo que es basicamente la misma consulta, hecha en
dos fases o en una, el PLAN en el caso 1 no utiliza el indice PK_CROSS_LIST
en C2 que esta a su disposicion.

Es un BUG de Firebird 1.5? Estoy cometiendo algun error el la QUERY1?

Saludos,


La franja horaria es GMT +2. Ahora son las 15:12:07.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi