Danke auch an Thorsten: das ist der vernünftige Weg für die Verknüpfung über JOIN.
Ergänzende Hinweise: StrVerz und PF-Verz sind smallint-Werte mit Inhalt 0/1/2, PLZ-Art sind int-Werte mit Inhalt 1...7. Damit alle Daten ausgelesen werden (siehe die Größenordnungen in meinem Beitrag #9), musste ich die Prüfung auf PLZ-Art in das SubSelect einfügen.
Der folgende Befehl ist jetzt meine endgültige Version (ergänzt um den zweiten JOIN und alle verwendeten Felder):
SQL-Code:
SELECT oa.Alort,
Ort.Name_lang,
Ort.Name_kurz,
Ort.Zusatz,
Ort.Zusatz_art,
oa.Name_kurz as NAME,
oa.Status,
p1.PLZ,
p1.Plz_art,
p1.Strverz,
p1.Pf_verz,
Ort.Kgs
FROM Orte2 oa
INNER JOIN (SELECT PLZ, Alort, PLZ_Art, StrVerz, PF_Verz
FROM PLZ p2
WHERE PLZ = (SELECT MIN(PLZ)
FROM PLZ
WHERE Alort = p2.Alort AND PLZ_Art >= 6)
) p1
ON p1.Alort = oa.Alort
JOIN Ort ON Ort.Id = oa.Alort
Da dieser View immer wieder einmal ausgeführt werden soll, möchte ich es - soweit nötig - noch optimieren. Da ich auch mit Ausführungsplänen noch keine Erfahrung habe, bitte ich hier um Hilfe.
IBExpert (danke auch an HK) liefert folgende Hinweise:
Zitat:
Plan:
PLAN (P1 PLZ ORDER PLZ_ALORT INDEX (PLZ_FK_ORT))
PLAN JOIN (OA INDEX (ORT_ALT_PK), ORT INDEX (ORT_PK), P1 P2 INDEX (PLZ_FK_ORT))
Adapted plan:
PLAN (P1 PLZ ORDER PLZ_ALORT INDEX (PLZ_FK_ORT)) PLAN JOIN (OA INDEX (ORT_ALT_PK), ORT INDEX (ORT_PK), P1 P2 INDEX (PLZ_FK_ORT))
Die genannten Indizes existieren alle bereits: PK sind PrimaryKey mit int-ID, FK sind ForeignKey auf entsprechende PKs. Mein Verständnis sagt, dass der Ausführungsplan optimiert ist. Stimmt das?
Wenn ich das SELECT als VIEW registriere: ist es sinnvoll/möglich/nötig, den "Adapted plan" per PLAN-Klausel hinzuzufügen?
Danke für diese weiteren Hinweise! Jürgen