Ho una grande join di 15 tavoli. Semplificato assomiglia a questo
WITH CTE AS
(
SELECT A.ID,
B.K,
X.Date,
X.ID,
ROW_NUMBER() OVER (PARTITION BY A.ID ORDER BY X.date ASC, x.id ASC) RN
FROM A
INNER JOIN B ON A.ID = B.ID
INNER JOIN C ON B.ID = C.ID
LEFT JOIN X ON (X.G = A.ID
OR X.H = B.ID
OR X.I = C.ID)
)
SELECT *
FROM CTE
WHERE RN = 1
Il tempo di esecuzione è di circa 1 secondo, e soprattutto a causa dell'ultimo JOIN X
. Per evitare doppioni, ho aggiunto il ROW_NUMBER
parte e lo ha trasformato in una CTE.
Come potrei ottimizzare utilizzando preferibilmente SQL ANSI, poiché esso è in esecuzione SQL Server e Oracle?