AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Problem mit Left Outer Join
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Left Outer Join

Ein Thema von Dumpfbacke · begonnen am 12. Nov 2008 · letzter Beitrag vom 18. Nov 2008
Antwort Antwort
Dumpfbacke

Registriert seit: 10. Mär 2005
Ort: Mitten in Deutschland
332 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Problem mit Left Outer Join

  Alt 12. Nov 2008, 18:43
Datenbank: Interbase • Version: 6 • Zugriff über: IBX
Hallo liebe Leute,
ich habe ein Problem mit einem Select auf einem Interbase - Server mit meinem Delphi Programm.

Hier der SQL (vereinfacht)

SQL-Code:
Select Tabelle1.*
From Tabelle1
Left Outer Join Tabelle2 on Tabelle1.ID1 = Tabelle2.ID2
Left Outer Join Tabelle3 on Tabelle2.ID4 = Tabelle3.ID3

Where Tabelle1.Bezeichnung = 'test'
and Tabelle3.Farbe = 'rot'
In der Tabelle3 sind einige Datensätze welche als Farbe rot haben.

Es ist ein Index auf ID1,ID2,ID3,ID4,Bezeichnung,Farbe. Nun haben sich die Datensätze der Tabelle1 (ca. 24.000) und Tabelle3 (ca 75.000) verdreifacht. Ich benutze die IBX Komponenten. Als Anzeige wird ein Grid benutzt und ein TIBDataSet um an die Daten zu kommen. Wenn ich es ohne den Join mache geht es recht zügig, jeodch mit dem Join dauert es um einiges länger als vorher auch dann wenn als Ergebnis eine kleine Anzahl von Datensätzen angezeit wird. Ich dachte die Anzahl der Datensätze ist egal, wenn das Ergebnis das selbe ist.

Um mir da ganze mal genauer anzusehen habe ich mir den SQL kopiert und der IBConsole ausgeführt. Dort geht es eigentlich sehr zügig. < 10 sec. je nach Werten. In meinem Programm dauert es ca 1 Minute bis ein Ergebnis kommt.

Hat jemand einen Tip für mich ? Ich habe den Left Outer Join schon mal durch ein in getauscht. Das war auch nicht besser.

Wieso ist die IBConsole schneller als mein Prohgramm ?

Danke Tanja
Tanja
  Mit Zitat antworten Zitat
automatix

Registriert seit: 1. Mai 2008
Ort: Remscheid
39 Beiträge
 
Delphi 2007 Enterprise
 
#2

Re: Problem mit Left Outer Join

  Alt 17. Nov 2008, 13:39
Hallo!

Eine Lösung habe ich nicht. Nur ein paar Vorschläge, wobei ich nicht beurteilen kann, ob die zutreffend sind (Abfrage oder Interbase). Mit Interbase habe ich noch nicht gearbeitet.

Sind das wirklich beides left outer join oder ist es vielleicht doch nur ein left outer join.
Dann wäre folgendes möglich:
Delphi-Quellcode:
select
   TABELLE1.*
from
   TABELLE1
   join TABELLE2
      on TABELLE2.ID2 = TABELLE1.ID1
   left outer join TABELLE3
      on TABELLE3.ID3 = TABELLE2.ID4
      and TABELLE3.FARBE = 'rot'
where
   TABELLE1.BEZEICHNUNG = 'test'
oder
Delphi-Quellcode:
select
   TABELLE1.*
from
   TABELLE1
   left outer join TABELLE2
      join TABELLE3
         on TABELLE3.ID3 = TABELLE2.ID4
         and TABELLE3.FARBE = 'rot'
      on TABELLE2.ID2 = TABELLE1.ID1
where
   TABELLE1.BEZEICHNUNG = 'test'
Sinnvolle Indexes für diese Abfrage wären aus meiner Sicht:
TABELLE1:
ID1, BEZEICHNUNG
TABELLE2:
ID2, ID4
TABELLE3:
ID3, FARBE

Seltsam ist allerdings, das es in der IBConsole wesentlich schneller geht. Machen die IBX-Komponenten auf Delphi Seite noch irgendetwas?. Ereigisse, berechnete Werte, etc?

Grüße
  Mit Zitat antworten Zitat
Benutzerbild von Der Jan
Der Jan

Registriert seit: 22. Dez 2005
289 Beiträge
 
Delphi XE7 Ultimate
 
#3

Re: Problem mit Left Outer Join

  Alt 17. Nov 2008, 17:41
Vermutung: Wenn du den TDataSet-Nachfolger von IBX verwendest (keine Ahnung wie der heißt), würde ich auf das Grid als Bremse tippen.
Schau mal, ob das DataSet Methoden wie DisableControls, DisableScrollEvents etc. hat. Verwende diese vor dem Aufruf des SQL und anschließend die entsprechenden Enable-Methoden.
Könnte evtl. helfen. Ist, wie gesagt, eine reine Vermutung.
Gruß, Jan
  Mit Zitat antworten Zitat
automatix

Registriert seit: 1. Mai 2008
Ort: Remscheid
39 Beiträge
 
Delphi 2007 Enterprise
 
#4

Re: Problem mit Left Outer Join

  Alt 18. Nov 2008, 09:31
Hallo!

Stimmt, könnte auch aus der Ecke kommen. Da gibt es auch noch BeginUpdate / EndUpdate des Grids.

Grüße
  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 22:04 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