Geschwindigkeits-Optimierung

Ich habe große Performanceprobleme bei der Abfrage von Daten. So brauche ich ~20 Sekunden für eine INNER JOIN abfrage, bei der Tabelle A ~100.000 Zeilen und Tabelle B ~55.000.000 Zeilen hat. Nach den INNER JOIN Begrenzungen bleiben von Tabelle B noch ~10.000 Zeilen übrig, nach dem INNER JOIN ist die Ausgabe der Abfrage ~500 Spalten

\

  • Aus der Datenbank wird nichts gelöscht oder geupdated, daher dürfte keine Fragmentierung vorliegen.
  • Die Spalten haben alle einen auto_increment key. Reicht das für die Indizierung oder muss ich diese anders vornhmen?



    Alle Tips, die zu einer Verschnellerung der Abfragen führen, werden gerne angenommen.


    Achja, ich habe ~4 GB RAM und einen 2,6GhZ Quad, Festplattengeschwindigkeit ~60.000 kb/s


    Daten meiner Datenbank:

Backends 3
Xact Committed 55475875
Xact Rolled Back 163929782
Blocks Read 10863978609
Blocks Hit 30299275053
Tupel-Zurückgegeben 2612734271432
Tupel-Geholt 432300736
Tupel-Eingefügt 306300762
Tupel-Aktualisiert 381
Tupel-Gelöscht 42
Größe 4227 MB



  • was sagt EXPLAIN ANALYSE
  • wie hoch sind shared_buffers und work_mem?
  • ein SERIAL (das meinst Du sicherlich mit auto_increment) erzeugt erst einmal KEINEN Index, ob Du also für die Abfrage passende Indexe hast kann aus Deinen Daten erst einmal bezweifet werden.
  • 500 Spalten klingt mir nach einem massiv verkorksten Design

Andreas

Eventuell könnte ein wenig mehr RAM auch nicht schaden. Läuft noch anderes auf der Kiste?

Gruß Uwe