![]() |
Datenbank: Firebird • Version: 2.1 • Zugriff über: ZEOS
SQL-Abfrage über 2 Tabellen, geschwindikteitsthema
Hallo,
ich habe zwei Tabellen in einer FB-Datenbank. Nun möchte ich überprüfen, welche Namen, in Tabelle 1 sowie in Tabelle 2 vorhanden sind und mir lediglich die ausgeben lassen, welche in Tabelle 1 aber nicht in Tabelle 2 enthalten sind. Ein Hinweis ist noch erforderlich. Tabelle 1 enthält ca. 1.000 Datensätze, Tabelle 2 hingegen ca. 35.000 Datensätze. Ich habe die Abfrage über 2 Arten durchgeführt. 1.) sql.text := 'SELECT * FROM Dat_new WHERE name NOT IN (SELECT name from Dat)'; Hier daurt es ca. 50 Sec. bis zur Ergebnislieferung 2.) sql.text := 'SELECT * FROM Dat_new LEFT JOIN Dat ON Dat_new.name <> Dat.name' Hier dauet es ca. 110 Sec bis zur Ergebnislieferung Dies ist natürlich in beiden Fällen rechtlange. Hat jemand eine Idee, wie ich dies durch eine bessere Abfrage beschleunigen kann ? |
Re: SQL-Abfrage über 2 Tabellen, geschwindikteitsthema
Wie sieht es mit den Indizes aus?
Welche der beiden Tabellen ist die große? Man könnte noch mot not Exists versuchen. |
Re: SQL-Abfrage über 2 Tabellen, geschwindikteitsthema
Hallo,
Not Exists, scheint es unter scheint unter Firebird 2.1 nicht zu geben, oder warum auch immer nciht zum Laufen bekommen. Mit Indizes in FB habe ich noch nicht gearbeitet, ist ein Ansatz, mit dem ich mich mal befassen sollten (Vielleicht ein Einlesetipp ???) Die dat ist die große Datei. |
Re: SQL-Abfrage über 2 Tabellen, geschwindikteitsthema
Not Exists sollte es schon länger geben
SQL-Code:
Wenn ein Index vorhanden ist, wird dieser anstatt der Einträge in der Tabelle. Lege mal in beiden Tabellen einen Index über das Feld Name an.
SELECT n.* FROM Dat_new n WHERENOT EXISTS (SELECT d.name from Dat d where d.name = n.name);
|
Re: SQL-Abfrage über 2 Tabellen, geschwindikteitsthema
Hallo,
super, viele Dank das war der Tipp. Keine Ahnung was ich bisher bei Not Exists gemacht habe. Nun machts wieder spass die Deltas abzufragen. SELECT n.* FROM Dat_new n WHERE NOT EXISTS (SELECT d.name from Dat d where d.name = n.name); |
Re: SQL-Abfrage über 2 Tabellen, geschwindikteitsthema
Hallo,
Zitat:
in Where und in Joins benutzt werden. Ausnahme sind Felder mit geringer Selektivität (z.B. M/W für männlich / weiblich), da sollte man die Query mal mit und mal ohne Index laufen lassen. Es könnte sein, dass FB mit Index etwas langsamer ist, wobei das ab FB2 im Vergleich zu FB1.X sehr viel besser gehandhabt wird. Hier ein schicker Link ![]() Über Indizes steht sehr viel im Netz, dass muss auch nicht direkt zu FB passen (Wikipedia z.B.). Heiko |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:00 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