Einzelnen Beitrag anzeigen

Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#11

Re: SELECT JOIN MIN richtig kombinieren?

  Alt 17. Nov 2007, 17:18
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
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat