Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Select über 2 Tables dauert mehere Minuten (https://www.delphipraxis.net/70443-select-ueber-2-tables-dauert-mehere-minuten.html)

shmia 30. Mai 2006 14:00

Re: Select über 2 Tables dauert mehere Minuten
 
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.

DataCool 30. Mai 2006 14:09

Re: Select über 2 Tables dauert mehere Minuten
 
@shmia:

Du bist mein Held :dancer: :hello:

Jetzt hat die Abfrage 125 ms gedauert,
ein großes Danke an alle, Ihr habt mir sehr geholfen.

Gruß Data


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:24 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz