![]() |
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:
Nicht abgedeckt wäre z.B.
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
SQL-Code:
Dies trifft in genau gleicher Weise für JOINs zu.
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 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:
dann könnte der JOIN effizient über den Primärschlüsselindex erfolgen.
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) 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. |
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 02:15 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz