![]() |
Re: Performance verbessern
hi,
hab das nun so eingebaut
Delphi-Quellcode:
hmm wirklich schneller ist es nun aber auch nicht :(
tv_rezept.Items.BeginUpdate;
try frm_laden.Show; frm_laden.Label1.Caption := 'Lade Datenbank'; Application.ProcessMessages; for i := 0 to namen.Count -1 do begin sqlq.Active := False; sqlq.SQL.Text := 'SELECT Count(name) FROM rezepte WHERE kategorie= :kat'; sqlqrez.SQL.Text := 'SELECT Count(name) FROM rezepte WHERE unterkat= :unterkat AND kategorie= :kat GROUP BY unterkat'; sqlq.ParamByName('kat').Value := namen.Strings[i]; sqlq.Open; with tv_rezept.Items do begin t := AddChild(nil,namen.Strings[i] + ' ('+sqlq.fieldbyname('Count(name)').AsString+')'); end; for a := 0 to 8 do begin if not (ini.ReadString(namen.Strings[i],'unter'+IntToStr(a),'') = '') then begin unterkat.Add(ini.ReadString(namen.Strings[i],'unter'+IntToStr(a),'')); end; end;//for a := for a := 0 to unterkat.Count -1 do begin sqlqrez.ParamByName('unterkat').Value := unterkat.Strings[a]; sqlqrez.Open; tv_rezept.Items.AddChild(t,unterkat.Strings[a]+ ' (' + sqlqrez.fieldbyname('Count(name)').AsString +')' ); sqlqrez.Active := False; end;//for a unterkat.Clear; frm_laden.progress.StepBy(10); end;//for i finally tv_rezept.Items.EndUpdate; frm_laden.Close; end; hab ich vllt irgendetwas falsch gemacht? gruß |
Re: Performance verbessern
Vielleicht sollte ich mal in rot und ganz groß Schreiben: Verzichte auf die Zwischenspeicherung von Daten in Ini-Dateien!!
Hole dir die Inhalte über Abfragen wie du sie benötigst. Es würde sich hier anbieten zuerst über die Hauptkategorien und in der Schleife über die Unterkategorien zu filtern. Wie sieht es mit den Indizes aus? |
Re: Performance verbessern
Hi,
Zitat:
SQL-Code:
SELECT Kategorie, UnterKategorie, COUNT(*) AS Anzahl
FROM Rezepte GROUP BY Kategorie, UnterKategorie ORDER BY Kategorie, UnterKategorie Zitat:
Code:
Dabei wäre noch die Frage, ob du auch die Masseinheiten in einer Lookup-Tabelle vorhalten willst.
Kategorien: ID, KAT_ID, Name
Rezepte: ID, NAME, KAT_ID Zutaten: REZ_ID, Position, Bezeichnung, Masseinheit, Menge Zubereitung: REZ_ID, Text Freundliche Grüße |
Re: Performance verbessern
Hallo Luncustaf,
ich würde nicht so viele Datenbankanfragen machen. Ich verstehe deine DB-Struktur noch nicht so ganz, vielleicht kannst du ja mal dazu sagen. Wenn du nur einen zweistufigen Baum brauchst, kannst du doch einfach alles mit einer SQL-Abfrage ranholen...
SQL-Code:
Gruss
SELECT k.name, ka.anzahl, '1' typ
FROM kategorie k LEFT JOIN (SELECT kategorie AS name, COUNT(*) anzahl FROM rezepte GROUP BY kategorie) ka ON k.name = ka.name UNION SELECT kategorie AS name, ra.anzahl, '2' typ FROM rezepte r LEFT JOIN (SELECT kategorie AS name, COUNT(*) anzahl FROM rezepte GROUP BY kategorie) ra ON r.name = ra.name ORDER BY name, typ Thorsten |
Re: Performance verbessern
hi,
viele antworten viel verwirrendes für mich ;) @omata deine abfrage verstehe ich nur zur hälfte - was wohl daran liegt das ich mich woh l noch bisserl tiefer mit der SQL geschichte beschäftigen sollte. hmm meine datenbankstruktur lässt sich sicherlich verbessern da ich sie eigentlich einfach mal nach gefühl gemacht habe was ich denn so brauche *schäm* @marabu ich habe die ini datei schon wieder rausgeschmissen und die txt-datei folgt als nächstes. wenn ich dich mit den masseinheiten richtig verstehe dann gehst du davon aus das diese vorgegeben sind - ich lasse diese aber vom benutzer selbst eintragen da es da 1000 verschieden möglichkeiten gibt. für was steht das Position in deinem modell bei rezepte? vielen dank für eure anregungen, vorschläge und natürlich die hilfe gruß |
Re: Performance verbessern
Schade ich dachte du probierst mal die SQL-Abfrage aus und schaust dir das Ergebnis an.
|
Re: Performance verbessern
Zitat:
gib mir 5min :) gruß |
Re: Performance verbessern
Du brauchst sie doch nicht in dein Programm einbauen! Schau dir doch erstmal das Ergebnis der Query an.
|
Re: Performance verbessern
hmm und wo soll ich mir das ergebnis anschauen wenn nicht im programm?
steh grad irgendwie auf dem schlauch |
Re: Performance verbessern
Ich dachte du benutzt MySQL? Da gibt es doch ein Administrator-Tool und in diesem einen Query-Analyzer.
Oder du gehst einfach auf die Konsole und ruft mysql direkt auf. Dort kannst du doch einfach mal die Anweisung absetzen und das Ergebnis anschauen. ...oder du packst dir in deinem Programm einfach eine ZQuery, Datasource und DGGrid auf die Form, dann kannst du das auch mal eben anschauen. Gruss Thorsten |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:10 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-2025 by Thomas Breitkreuz