AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi SQL-Abfrage über 2 Tabellen, geschwindikteitsthema
Thema durchsuchen
Ansicht
Themen-Optionen

SQL-Abfrage über 2 Tabellen, geschwindikteitsthema

Ein Thema von waldforest · begonnen am 31. Jan 2010 · letzter Beitrag vom 1. Feb 2010
Antwort Antwort
waldforest

Registriert seit: 8. Mai 2005
366 Beiträge
 
Delphi XE3 Enterprise
 
#1

SQL-Abfrage über 2 Tabellen, geschwindikteitsthema

  Alt 31. Jan 2010, 13:00
Datenbank: Firebird • Version: 2.1 • Zugriff über: ZEOS
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 ?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: SQL-Abfrage über 2 Tabellen, geschwindikteitsthema

  Alt 31. Jan 2010, 13:10
Wie sieht es mit den Indizes aus?
Welche der beiden Tabellen ist die große?
Man könnte noch mot not Exists versuchen.
Markus Kinzler
  Mit Zitat antworten Zitat
waldforest

Registriert seit: 8. Mai 2005
366 Beiträge
 
Delphi XE3 Enterprise
 
#3

Re: SQL-Abfrage über 2 Tabellen, geschwindikteitsthema

  Alt 31. Jan 2010, 13:36
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.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: SQL-Abfrage über 2 Tabellen, geschwindikteitsthema

  Alt 31. Jan 2010, 13:42
Not Exists sollte es schon länger geben
SELECT n.* FROM Dat_new n WHERENOT EXISTS (SELECT d.name from Dat d where d.name = n.name); 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.
Markus Kinzler
  Mit Zitat antworten Zitat
waldforest

Registriert seit: 8. Mai 2005
366 Beiträge
 
Delphi XE3 Enterprise
 
#5

Re: SQL-Abfrage über 2 Tabellen, geschwindikteitsthema

  Alt 31. Jan 2010, 13:51
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);
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: SQL-Abfrage über 2 Tabellen, geschwindikteitsthema

  Alt 1. Feb 2010, 08:39
Hallo,

Zitat:
Mit Indizes in FB habe ich noch nicht gearbeitet, ist ein Ansatz, mit dem ich mich mal befassen sollten
Indizes sollte auf alle Felder die

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
1


Über Indizes steht sehr viel im Netz, dass muss auch nicht direkt zu FB passen
(Wikipedia z.B.).


Heiko
Heiko
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:27 Uhr.
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