Entwickler-Ecke

Datenbanken - view abfrage dauert viel zu lange


Matthias-K - Sa 28.01.06 18:17
Titel: view abfrage dauert viel zu lange
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!


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


MSCH - 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


mkinzler - 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?


Matthias-K - 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


mkinzler - 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.


MSCH - 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