MySQL Performance und die richtige Hardware

tekilla209

Mitglied
Hi Leutz,

ich habe mir eine Adressdatenbank gebastelt. Momentan sind ca. 200.000 dressen gespeichert. Es werden vermutlich bald 4 Mio sein.
Als Datenbankserver hab ich im moment ein 2Gigaherz P4 mit nur 256MB RAM.
Wenn ich eine Abfrage starte, die einen JOIN über 3 Tabellen macht und nach Postleitzahlen bereich filtert, dauert das ewig.

wenn ich:
Code:
SELECT firma.Firma1, firma.Firma2, firma.Firma3, firma.Firma4, firma.Strasse, firma.PLZ, ort.Ort, ansprechpartner.Titel, ansprechpartner.Name AS Ansprechpartner_Name, ansprechpartner.Vorname, ansprechpartner.Anrede, ansprechpartner.Briefanrede, ansprechpartner.Telefon, ansprechpartner.Telefax, ansprechpartner.eMail, firma.Internet, branche.Name AS branche_Name
FROM branche INNER JOIN (ort INNER JOIN (firma INNER JOIN ansprechpartner ON firma.ID=ansprechpartner.Firma_ID) ON ort.PLZ=firma.PLZ) ON branche.ID=firma.Branchen_ID
WHERE ort.PLZ>=10000 And ort.PLZ<=60000;
im MySQL Querry Browser ausführe braucht der für 1028512 Datensäzte 327,1262 Sekunden also fast 5 1/2 Minuten.

1. Wie kann ich meine Anfrage verbessern, dass das schneller geht?
2. Kann ich Stored Proceedures mit Variablen für den PLZBereich verwenden?
Wie geht das? Warum sagt er mir im QuerryBrowser: Script line: 4 Access denied for user 'root'@'%' to database 'test'
3. Wieviel Speicher sollte mein Server mindestens haben, damit ich damit einigermaßen vernünftig arbeiten kann? PS: in der Regel greift nur eine Person auf die DB zu. Also keine Connkurierenden Zugriffe
 
Zuletzt bearbeitet:
Hallo,

hast du einen Index auf der Postleitzahl? Obwohl, wenn du so eine Abfrage machst, die wohl einen Grossteil deiner Postleitzahlen betrifft, fällt das nicht mehr ins Gewixht. Als allererste prüfe mal mit EXPLAIN <sql> wie deine Datenbank wohl vorgehen würde.

Wenn sehr viele Datensätze ausgelesen und sortiert werden müssten, kann die Speicherauslastung schon nach oben gehen. Im ungünstigen Fall findet die Sortierung über das Filesystem statt, was nicht gerade schnell ist. Daher würde mehr RAM denke ich in jedem Falle helfen. Natürlich musst du MySQL so versuchen einzustellen, dass er von dem Mehr an RAM auch profitiert.
Als nächstes wäre die Speicherengine für deine Tabellen zu nennen, die einen Unterschied ausmachen kann. Welche verwendest du im Moment?

Desweiten musst du bei einer Abfrage, die 1 Mio Datensätze liefert, davon ausgehen, dass auch die Übertragung vom Datenbank-Server zum Client ein wenig Zeit beansprucht. Eine Stored Procedure hilft dir hier im speziellen Fall nicht wirklich weiter, um die zu übertragende Datenmenge zu reduzieren oder die Performance signifikant zu erhöhen.

Poste als erstes am besten Mal die Ausgabe von EXPLAIN <sql-statement> und deine Tabellenstruktur für diese 3 Tabellen

Markus
 
Zuletzt bearbeitet:
Danke!

hat sich erledigt, ich hab die DB in Acess modeliert und dann Importiert, dann waren aber die Keys nicht richtig gesetzt.
 
Zurück