Einzelnen Beitrag anzeigen

jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#9

AW: Datenbankabfrage beschleunigen

  Alt 23. Apr 2011, 17:59
Ok, nun hab ich es auch verstanden.

Code:
select d.* from
  a, b, c, d
where
      a.id = b.parent
  and b.id = c.parent
  and c.id = d.parent
  and c.id = :level3
  and b.id = :level2
  and a.id = :level1
Ist das die Variante, die 45 Sekunden braucht?

'Primary' und 'Foreign Key' ist erstmal eine logische Definition. Das kann es auch ohne Index geben. Mehrfachindizierung macht m.E. erstmal keinen Sinn.
Es muss nicht unbedingt jeweiles ein Index dazu da sein. Obwohl bei einem Primärschlüssel ja i.D.R automatisch ein Index erzeugt wird.
Du solltest aber sicherstellen, dass die Indizierung auf den Joinfeldern vorhanden ist.

Ansonsten liefert eine bloße Level 1 Einschränkung ca 1,5 Mio Datensätze im Schnitt! Das ist unabhängig von der Breite von D eine relevante Größenordnung, so groß, dass sie zumindest höchstens technisch zu gebrauchen ist. Und es ist dann sehr wohl fraglich, ob Netz und Client das verkraften.

Ich empfehle Dir ein Test SQL (sowas wie oben) mit
"explain analyze" zu bearbeiten und Indizierung bzw. Parametrierung und Aufbau des Selects damit solange zu untersuchen und ändern, bis Du zufrieden bist oder nichts mehr rauszuholen ist.
Gruß, Jo
  Mit Zitat antworten Zitat