Einzelnen Beitrag anzeigen

shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#11

Re: Select über 2 Tables dauert mehere Minuten

  Alt 30. Mai 2006, 14:00
Wenn du Verbundschlüssel verwendest, dann musst du bei JOINS dafür sorgen, dass in der
ON-Klausel alle Felder (oder zumindest Felder von links) des Verbundschlüssels angesprochen werden.

Angenommen eine Tabelle habe einen Verbundschlüssel mit den Feldern A,B und C.
Es gibt nun "abgedeckte" und "nicht-abgedeckte" Abfragen.
Abgedeckte Abfragen benützen den Index; nicht abgedeckte Abfragen können den Index nicht benützen.
Abgedeckt wäre:
SQL-Code:
SELECT * FROM Tabelle WHERE A=1 AND B=2 AND C=0
SELECT * FROM Tabelle WHERE A=1 AND B=2
SELECT * FROM Tabelle WHERE A=1
Nicht abgedeckt wäre z.B.
SQL-Code:
SELECT * FROM Tabelle WHERE AND B=2 AND C=0
SELECT * FROM Tabelle WHERE A=1 AND C=5
SELECT * FROM Tabelle WHERE B=8
Dies trifft in genau gleicher Weise für JOINs zu.
Würdest du z.B.
für Table Transaktion ist der Primary Key ein Verbundschlüssel("SORT_ID", "ID").
für Table TransaktionDetails ist der Primary Key ein Verbund("SORT_ID", "TRANSAKTION_ID", "ID")
wählen und dann beim JOIN schreiben:
SQL-Code:
SELECT ARTIKEL_NR, Sum(ANZAHL) AS ANZ, Sum(PREIS * ANZAHL) as GPreis
FROM TRANSAKTION T INNER JOIN TRANSAKTIONDETAILS TD ON(T.SORT_ID=TD.SORT_ID AND T.ID = TD.TRANSAKTION_ID)
dann könnte der JOIN effizient über den Primärschlüsselindex erfolgen.
Das ist aber erst die halbe Miete.
Auch das Feld T.ENDE_DT sollte indiziert sein.
Die Ergebnismenge ist nun soweit reduziert, dass ein Index auf T.BON_TYP keine Verbesserung mehr bringt.
Andreas
  Mit Zitat antworten Zitat