Warum
SELECT Barraportfolioname
FROM portfolio
WHERE id IN (SELECT DISTINCT i1.portfolioid
FROM Import i1
LEFT OUTER JOIN Import i2
ON i1.PortfolioID = i2.PortfolioID
AND i2.ImportSetID = 82
WHERE i1.ImportSetID = 83
AND i2.ID IS NULL)
dauert 0 Sekunden, während die folgende Abfrage 5 Sekunden dauert.
SELECT DISTINCT p.BarraPortfolioName AS name
FROM Import i1
INNER JOIN Portfolio p
ON p.ID = i1.PortfolioID
LEFT OUTER JOIN Import i2
ON i1.PortfolioID = i2.PortfolioID
AND i2.ImportSetID = 82
WHERE i1.ImportSetID = 83
AND i2.ID IS NULL;
Ich benutze SQL Server. Beide Tabellen haben Indizes für alle Spalten, die in der Abfrage verwendet werden, dh Portfolio-ID, ID, Import-ID.
Bearbeiten von gbn, basierend auf OP-Kommentar
Sie sagten:
Dies funktioniert viel besser als die beiden vorherigen Abfragen.
select
BarraPortfolioName
from
(
select distinct p.BarraPortfolioName,portfolioid
from
import i1
inner join
portfolio p on p.id=i1.portfolioid
where
importsetid = ?
) as p1
left outer join
(
select distinct portfolioid
from import
where importsetid = ?
) as p2 on p1.portfolioid = p2.portfolioid
where
p2.portfolioid is null