Autor Beitrag
Matthias-K
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 271

Win95, Win98, Win2000, WinXP, Linux
D2, D4 Client/Server, D5 Enterprise, D6 Enterprise, D7 Enterprise, Delphi2005, C/C++ 3.0, C/C ++ 5.0, C/C++ 6.0
BeitragVerfasst: Sa 28.01.06 18:17 
moin leutz,

ich habe folgendes prob:

ich habe mir einen view gebaut, aus 3 tabellen, jeweils über ein id feld verknüpft!

unter acces, wo die db vorher war, läuft dieser view einwandfrei.

is ja auch nur eine simple abfrage!

ausblenden SQL-Anweisung
1:
2:
3:
select * from tabelle1,tabelle2,tabelle3
where tab2_id = tab1_id
  and tab3_id = tab2_id


nur dieser view braucht ein paar minuten, bis er aufgerufen ist! nur versteh ich das nicht!

es handelt sich um einen firebird 1.5 embeddet!

habs mit ibo versucht, ob es an meinem programm liegt, aber dort is es genauso!

kennt einer von euch das prob und weis abhilfe???

mfg matthias

_________________
Ein Spezialist ist ein Mensch, der immer mehr von immer weniger weis, bis er alles von nichts weis!
MSCH
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1448
Erhaltene Danke: 3

W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
BeitragVerfasst: Sa 28.01.06 19:05 
versuchs mal mit JOins;

SELECT Tabelle1.*,Tabelle2.*,Tabelle3.*
FROM (Tabelle1 INNER JOIN Tabelle2 ON Tabelle1.ID = Tabelle2.ID) INNER JOIN Tabelle3 ON Tabelle2.id = Tabelle3.ID)

(oder so ähnlich :-)

Wichtig: Indexe, ohne diese dauern Abfragen immer länger

grez
msch

_________________
ist das politisch, wenn ich linksdrehenden Joghurt haben möchte?
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Sa 28.01.06 19:22 
Theoretisch dürfte es keinen Unterschied machen ob du Joins in SQL92 oser SQL99-Notation abfragst.
Wie sieht die Struktur der Tabllen aus? Constraints? Indices? Anzahl der Felder/Datensätze? Wie sieht der Plan aus?

_________________
Markus Kinzler.
Matthias-K Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 271

Win95, Win98, Win2000, WinXP, Linux
D2, D4 Client/Server, D5 Enterprise, D6 Enterprise, D7 Enterprise, Delphi2005, C/C++ 3.0, C/C ++ 5.0, C/C++ 6.0
BeitragVerfasst: Sa 28.01.06 23:59 
also, ich habe es nochmal getestet!

in allen tabellen sind es jeweils 6000 ds!

es sind keine indexe, keine constraints usw darauf vorhanden! die db is z.zt. ca 90 mb groß! is also noch relativ klein!

also ich bin ratlos!

auch der zugriff ohne view auf die tabellen mit dieser verknüpfung untereinander ist viel zu langsam!

matthias

_________________
Ein Spezialist ist ein Mensch, der immer mehr von immer weniger weis, bis er alles von nichts weis!
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: So 29.01.06 10:27 
Wenn die Tabellen keine Indizes haben und auch keine Schlüssel definiert sind, könnte das schon der Grund für den langsamen Query sein. Definiere mal die PK und FK-Constraints für die Schlüsselfelder tabx_id der 3 Tabellen.
Wievile Detaildatensätze kommen durchschnittlich auf einen Masterdatensatz? Du mußt bedenken das dein Join über 3 Tabellen eine weit größere Ergebnismenge liefern kann.
Wieviel Felder haben die 3 Tabellen? Versuche Mal die * mit der nur wirklich benötigten Feldliste zu ersetzen.

_________________
Markus Kinzler.
MSCH
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1448
Erhaltene Danke: 3

W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
BeitragVerfasst: So 29.01.06 12:53 
tse tse,
KEINE Indexe.
Kein Wunder, deine Datenbank rödelt sich tot.
das sind grob 6000*6000*6000= 216000000000 suchoptionen.

da brauchst du ne menge Speicher (für den Cache) und schätzungsweise 4 CPUs :-)

grez
msch

_________________
ist das politisch, wenn ich linksdrehenden Joghurt haben möchte?