AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

performance problem

Ein Thema von Delphi-Phil · begonnen am 2. Jul 2008 · letzter Beitrag vom 3. Jul 2008
Antwort Antwort
Delphi-Phil

Registriert seit: 22. Jun 2007
410 Beiträge
 
#1

performance problem

  Alt 2. Jul 2008, 16:44
Datenbank: mysql • Zugriff über: ado
Hallo Delphi-Freunde,

ich habe folgenden SQL Code und die Performance ist einfach gruselig...

Die Abfrage dauert geschlagene 2 Minuten!!! Wie kann sowas sein??

SQL-Code:
SELECT vorname, nachname, fach
FROM schueler s
INNER JOIN schueler_faecher sf
  ON s.id = sf.id_schueler
INNER JOIN faecher f
  ON sf.id_fach = f.id
INNER JOIN schueler_klassen sk
  ON s.id = sk.idschueler
WHERE idklasse = :KID
  AND NOT EXISTS (SELECT *
                  FROM zeugnis
                  WHERE id_schueler = s.id
                    AND id_fach = sf.id_fach)
Ganz liebe Grüße von der sonnigen Ostsee, ich liege hier mit Laptop und UMTS Karte am Strand (O2 mach es für 25 Euro Mtl. möglich)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.169 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: performance problem

  Alt 2. Jul 2008, 16:48
Wie groß ist die Datenbank (Anzahl der Einträge in den entsprechenden Tabellen)?
Wieviel Speicher wird dem SErver zugestanden (die Standardinstallation von MySQL ist ziemlich sparsam, wenn nicht sozusagen knausrig)?
Sind auf allen gejointen Felder Indize vorhanden?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.534 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: performance problem

  Alt 2. Jul 2008, 16:53
Und so (ohne Gewähr)?
SQL-Code:
SELECT vorname, nachname, fach
FROM schueler s
INNER JOIN schueler_faecher sf
  ON s.id = sf.id_schueler
INNER JOIN faecher f
  ON sf.id_fach = f.id
INNER JOIN schueler_klassen sk
  ON s.id = sk.idschueler
LEFT JOIN zeugnis z
  ON z.id_schueler = s.id AND z.id_fach = sf.id_fach
WHERE idklasse = :KID
AND z.id_schueler IS NULL
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#4

Re: performance problem

  Alt 2. Jul 2008, 16:56
Zitat von Delphi-Phil:
ich habe folgenden SQL Code und die Performance ist einfach gruselig...
Die Abfrage dauert geschlagene 2 Minuten!!! Wie kann sowas sein??
Schlechte Server, schlechtes DB-Design, keine/falsche Indexe. Ganz selten fuhrwerkt irgendein blöder Prozess und frisst die CPU auf. Aber Bernhard hat schon die richtigen Fragen gestellt.

Grundsätzlich scheint jedoch das Gerücht verbereitet zu sein, ein RDBMS (insbesondere MySQL) sei eine Zauberschachtel und 'unheimlich schnell'. Das einzige, was unheimlich schnell ist, ist die Verbreitung so eines Schmarrns . Ich hab sogar schon gehört, das so ein RDMBS sich seine Index mal eben optimal zusammenbaut... Eine RDBMS ist nur so schnell, wie das Server- und Datenbankdesign es zulässt. Und das ist reine Handarbeit.

Wichtig ist
1. Gute Hardware (kein Turboteil, aber 1-4GB RAM sollten es schon sein), gute HD usw.
2. Gutes DB-Design. Eine Mischung aus 2. und 3.NF machts.
3. Indexe nur an den notwendigen Stellen, allerdings nicht bei kleinen Tabellen (10-50 Records)

Dann gibt es noch ca. 175.819,3 Tipps und Tricks, wo man noch rumschrauben kann, aber wenn Du die ersten drei Punkte beachtest, kommst du schon sehr weit.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Delphi-Phil

Registriert seit: 22. Jun 2007
410 Beiträge
 
#5

Re: performance problem

  Alt 2. Jul 2008, 17:04
danke erstmal für die guten tips, ich werde alles prüfen und dann morgen bescheid geben...
  Mit Zitat antworten Zitat
mquadrat

Registriert seit: 13. Feb 2004
1.113 Beiträge
 
Delphi XE2 Professional
 
#6

Re: performance problem

  Alt 3. Jul 2008, 08:13
Ich würde das auch so probieren wie DeddyH das vorgeschlagen hat. Diese Unter-Selects sind ein ziemlicher Performance-Killer.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#7

Re: performance problem

  Alt 3. Jul 2008, 09:34
Zitat von mquadrat:
Diese Unter-Selects sind ein ziemlicher Performance-Killer.
Wie kommst du darauf? Normalerweise erzeugt ein guter SELECT-Compiler für Subselects den gleichen Suchbaum wie für (Left Joins). Jedenfalls sollte er das tun. (MSSQL machts) Aber ob MySQL da mitmacht, weiss ich gerade nicht...
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 08:19 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