AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Performance verbessern
Thema durchsuchen
Ansicht
Themen-Optionen

Performance verbessern

Ein Thema von Luncustaf · begonnen am 8. Dez 2006 · letzter Beitrag vom 7. Jan 2007
Antwort Antwort
Seite 3 von 9     123 45     Letzte »    
Luncustaf

Registriert seit: 31. Jan 2003
80 Beiträge
 
Delphi 6 Enterprise
 
#21

Re: Performance verbessern

  Alt 10. Dez 2006, 17:11
hi,

hab das nun so eingebaut

Delphi-Quellcode:
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;
hmm wirklich schneller ist es nun aber auch nicht
hab ich vllt irgendetwas falsch gemacht?

gruß
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Performance verbessern

  Alt 10. Dez 2006, 17:21
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?
Markus Kinzler
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#23

Re: Performance verbessern

  Alt 10. Dez 2006, 17:31
Hi,

Zitat von Luncustaf:
... sehe ich es richtig das ich zb die unterkategorien mit group bei sortieren soll, so das das zählen schneller geht? ...
Gruppieren ist nicht Sortieren, aber du denkst schon in die richtige Richtung:

SQL-Code:
SELECT Kategorie, UnterKategorie, COUNT(*) AS Anzahl
FROM Rezepte
GROUP BY Kategorie, UnterKategorie
ORDER BY Kategorie, UnterKategorie
Zitat von Luncustaf:
... ich habe momentan 4 tabellen, ... die zwei tabellen kategorie und unterkat brauche ich momentan eigentlich nicht mehr da ich die werte dieser beiden lokal liegen habe. ...
Eigentlich schade. Markus hat es ja auch schon angedeutet: Du solltest deine Tabellen nicht teilweise durch lokale INI- oder Text-Dateien ersetzen. Am meisten gewinnst du, wenn du die Zahl deiner Queries reduzierst. Und an deinem Datenmodell könntest du noch so einiges preofessionalisieren.

Code:
Kategorien: ID, KAT_ID, Name
Rezepte: ID, NAME, KAT_ID
Zutaten: REZ_ID, Position, Bezeichnung, Masseinheit, Menge
Zubereitung: REZ_ID, Text
Dabei wäre noch die Frage, ob du auch die Masseinheiten in einer Lookup-Tabelle vorhalten willst.

Freundliche Grüße
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#24

Re: Performance verbessern

  Alt 10. Dez 2006, 17:35
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:
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
Gruss
Thorsten
  Mit Zitat antworten Zitat
Luncustaf

Registriert seit: 31. Jan 2003
80 Beiträge
 
Delphi 6 Enterprise
 
#25

Re: Performance verbessern

  Alt 10. Dez 2006, 18:02
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ß
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#26

Re: Performance verbessern

  Alt 10. Dez 2006, 18:06
Schade ich dachte du probierst mal die SQL-Abfrage aus und schaust dir das Ergebnis an.
  Mit Zitat antworten Zitat
Luncustaf

Registriert seit: 31. Jan 2003
80 Beiträge
 
Delphi 6 Enterprise
 
#27

Re: Performance verbessern

  Alt 10. Dez 2006, 18:07
Zitat von omata:
Schade ich dachte du probierst mal die SQL-Abfrage aus und schaust dir das Ergebnis an.
hi ich probiere sie gerne aus. werde probieren sie an der richtigen stelle einzubauen.
gib mir 5min


gruß
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#28

Re: Performance verbessern

  Alt 10. Dez 2006, 18:10
Du brauchst sie doch nicht in dein Programm einbauen! Schau dir doch erstmal das Ergebnis der Query an.
  Mit Zitat antworten Zitat
Luncustaf

Registriert seit: 31. Jan 2003
80 Beiträge
 
Delphi 6 Enterprise
 
#29

Re: Performance verbessern

  Alt 10. Dez 2006, 18:15
hmm und wo soll ich mir das ergebnis anschauen wenn nicht im programm?
steh grad irgendwie auf dem schlauch
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#30

Re: Performance verbessern

  Alt 10. Dez 2006, 18:18
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 9     123 45     Letzte »    


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 05:12 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