Zitat von
Union:
Dann fällt auf jeden Fall das schreckliche SELECT *
weg - das wäre für mich der erste Optinierungsschritt.
Kannst du das für mich noch begründen. =)
Ich hab drei unterschiedliche Möglichkeiten für Abfragen erstellt:
SQL-Code:
SELECT *
FROM ADRESSEN
WHERE ADRESSEN.IDNR IN (
SELECT DISTINCT IDNR
FROM ADRESSEN
INNER JOIN ADRESSGRU ON
(ADRESSEN.IDNR = ADRESSGRU.ADR_ID) AND
GR_ID in (2,3 /* [...] */)
)
ORDER BY NAME1 ASC
SQL-Code:
SELECT *
FROM ADRESSEN
WHERE ADRESSEN.IDNR IN (
SELECT IDNR
FROM ADRESSEN
INNER JOIN ADRESSGRU ON
(ADRESSEN.IDNR = ADRESSGRU.ADR_ID) AND
GR_ID in (2,3 /* [...] */)
GROUP BY IDNR
)
ORDER BY NAME1 ASC
SQL-Code:
SELECT *
FROM ADRESSEN
WHERE IDNR in (
SELECT ADR_ID
FROM ADRESSGRU
WHERE GR_ID in (2,3 /* [...] */)
)
ORDER BY NAME1 ASC
Diese Abfrage ist nach einem simplen Test am performantesten. Spricht etwas dagegen, mit der Unterabfrage zu arbeiten?
Kann man das noch weiter optimieren? (Sieht fast so aus wie die von alzaimar, dessen Abfrage ähnlich schnell ist.)
LG,
Xong