MySQL Abfrage. 136 Abfragen in 20 Sekunden normal?

sonnenfänger

Grünschnabel
Hallo,

Ich bin gerade an der Erstellung einer Website. Da hier der Text in 4 Sprachen ist, muss ich natürlich pro wort/Eintrag eine ID in der Datenbank suchen und das entsprechende Wort in der gewählten Sprache auslesen und anzeigen lassen.

Leider dauert das ganze sehr lange, weshalb ich mir erlaubt habe in der Datenbankklasse einen Eintrag einzubauen, der in eine trackingTabelle alle Anfragen hineinschreibt und mit Zeitstempel versieht.

Auf diese Weise konnte ich herausfinden, dass ich alleine für die Startseite mindestens 136 Abfrage habe und der Aufbau 20 Sekunden dauert. Das ist absolut inakzeptabel.

Bei einem Transfer von einer Datenbank in eine andere habe ich es einmal auf 4000 Einträge in 10 Sekunden geschafft.

Woran kann so etwas liegen? Wie sehr verzögern Vergleiche von Einträgen zweier oder mehrerer Tabellen die ganze Sache?



Verbindung ist schneller als einfaches DSL, PHP 4.3.10, MySQL Client API 3.23.58, PC Athlon XP 2200+, 1.8GHz, 384MB RAM, XP Prof SP 2
 
Vielleicht könntest Du in einer Abfrage (statt vieler einzelner Abfragen) mehere Wörter Abfragen, die Du in ein sortiertes Array überträgst.

Das wird einiges bringen. Dafür mußt Du aber dein Programm entsprechend anpassen.

Unter Umständen sind aber auch einfach deine SQL-Anfragen nicht optimai?

Verwendest Du sinnvolle Indexe?

vop
 
vop hat gesagt.:
Unter Umständen sind aber auch einfach deine SQL-Anfragen nicht optimai?

Verwendest Du sinnvolle Indexe?

vop

Mittlerweile bin ich wirklich darauf umgestiegen alle texte pro seite komplett einzulesen und in variablen mit textid als deren index auszugeben. klappt ganz gut. konnte von 136 anfragen auf 44 runter, db einträge konnte ich von 20 auf 8 sekunden runtersetzen und seitenaufbau komplett brachte mir 2 sekunden ersparnis.

Das mit dem Index habe ich gestern abend gelesen. bin absoluter Newbie was das angeht. Wie funktionieren Indizes, was bringt mir das?
 
Stell Dir vor, du suchst die Telefonnummer eines Freundes in einem Telefonbuch, welches nicht sortiert (indiziert) wäre. Was müßtest Du tun?
Solange suchen, bis du den Namen deines Freundes gefunden hast. Du mußt also im schlimmsten Fall alle Einträge ansehen.

Weißt du aber den Nachnamen deinese Freundes, bspw. "Freund" , dann kannst Du im Telefonbuch zuerst zur Seite "F" dann bis Buchstabe "r" etc. suchen. Das geht schnell!

So in etwa mußt du Indexe verstehen. Das sind Sortierlisten, die eine schnelle Suche ermöglichen!
Wenn Du also eine Liste mit Wörtern hast, solltest Du unbedingt Indexe verwenden.
Schaue dich mal im Tutorialbereich MySQL um.

Da müßtest Du fündig werden.

Das kann dir eine zig-fachen Geschwindigkeitsgewinn bringen. Je größer die Tabelle, desto größer der Gewinn. Stehen in einer Tabelle aber nur 50 Einträge, dann bringt ein Index nicht viel.

Soweit,

vop
 
Hey herzlichen Dank für den Tipp mit dem Index. Das hatte wahnsinnige Auswirkungen. Ich hatte z.B. eine Abfrage bei der knapp 3Mrd Zeilen überprüft hätten müssen (3 Tabellen: Dabei Zeilen 31258, 1, 93956). Durch hinzufügen von Index konnte ich jetzt auf 5 () runter (5, 1, 1)

Einfach nur Hammer. Die Startseite ist auch wesentlich schneller im Aufbau.

Jetzt komme ich als Newbie auf die Idee doch sämtliche Spalten mit indexen zu versehen. Ist das sinnvoll? worauf muss ich achten? kann das irgendwas langsamer machen?
 
Folgendes ist bei Indexes zu beachten

1. Sie machen nur Sinn, wenn die Tabelle viele Einträge hat. Sonst ist es u. U. schneller alle Einträge anzusehen anstatt eine weitere Datei (den Index) zu öffnen und durchzugehen.

2. Indexdateien erzeugen zusätzlichen Speicheraufwand (logisch)

3. Beim Einfügen von Werten in eine Tabelle dauert der Vorgang länger, je mehr Index du verwendest (eigentlich auch klar, da jeder neuer Eintrag in die entsprechend sortierten Listen einsortiert werden muß. Mehr Listen => mehr Arbeit => mehr Zeit)

4. Wenn die Wertemenge zu klein ist macht ein Index ebenso wenig Sinn. Hast Du bspw. eine Spalte, in der nur JA oder NEIN steht, macht ein Index nicht viel Sinn. Je mehr unterschiedliche Werte, desto größer der Nutzen.

Ansonsten mach Dich einfach mal schlau bzgl. Indexen

vop
 
Zurück