PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [SQL] MySQL Preformance (Abfragen, Tabellen und Funktionen)



MrChicken
31.12.2012, 19:14
Hallo,

ich habe mal ein paar Fragen was die Performance von MySQL angeht.

1. Wie viele Abfragen sind so "guter Durchschnitt"?
Ich liege bei meiner Seite je nach Inhalt irgendwo zwischen 10-20 Abfragen eingeloggt bzw. <5 ausgeloggt.
Wie viel verträgt so ein normaler Datenbankserver?
Wie viele Abfragen sind auf anderen Seiten so normal?

2. Wie viele Zeilen verträgt eine MySQL Tabelle?
Ich habe mein Script etwas bearbeitet und Tabellen zusammengefasst. In einer sind ca. 1500 Zeilen und 16 Spalten (Doubles, INT und Varchars drin). Noch läuft da alles, aber ab wann stößt man da an die Performancegrenze?

3. Eine Frage zu den Funktionen:
Beim Tausch Lose->Bonuslose habe ich momentan 12 Abfragen.
Dabei wird beim Tausch in einem Query Lose abgezogen und Bonuslose gutgeschrieben.
Jetzt habe ich dafür auch 2 Funktionen.
Eine Funktion: Lose abziehen, eine Funktion Bonuslose gutschreiben (je 1 Query pro Funktion)
Wenn ich jetzt statt des normalen Queries die 2 Funktionen einbaue werden es aber 14 Abfragen.
Aber es müssten doch 13 sein :suspicious: Wo kommt die neue Abfrage her?
Edit: Stimmt doch alles, hatte noch mehr geändert als das :der:

Und dazu noch eine Frage:
4. Macht es (von der Geschwindigkeit her) einen Unterschied ob ich direkt den Query einbinde oder erst auf die functions.lib verweise und dort den Query ausführe. Weil ich lieber (der Einfachheit/Übersichtlichkeit halber) mit Funktionen arbeite.
Oder sollte man doch lieber die Querys direkt einbinden.

P.S.: Frohes neues ;)

jpwfour
02.01.2013, 14:55
Grundsätzlich gilt natürlich, je weniger Abfragen, desto besser für die Performance.
Wobei eine Abfrage, die dann aber 10 Sekunden dauert, weil ineffektiv, genausoschlecht ist wie 10.000 sehr schnelle Abfragen zur gleichen Zeit :wink:

Schau mal in deiner Datenbankverwaltung, da sollte es Statistiken geben, wie viele Anfragen MySQL pro Sekunde verarbeiten muss, das sagt wohl eher was aus.

ALso MySQL ist für sehr große Datenmengen ausgelegt, über Limits musst du dir keine Gedanken machen, was Zeilenanzahl angeht ;-)
Eher, welche Limits dir dein Hoster setzt, was die Gesamtgröße der Datenbank betrifft.

Wenn du allerdings "schlechte" Abfragen hast, kann es sein, dass diese jede Zeile durchgehen müssen, und dann wirds immer schlechter, umsomehr Zeilen. Die Lösung dafür besteht aber im setzen von Indizes und optimieren der Abfragen.

http://dev.mysql.com/doc/refman/5.1/de/show-status.html
http://dev.mysql.com/doc/refman/5.1/de/server-status-variables.html

MrChicken
10.01.2013, 16:03
Danke schon mal, da ich leider keinen eigenen Datenbankserver für das VMS habe ist die Auswertung etwas schwierig, aber da er generell nicht sehr viele Anfragen/Sekunde hat, denke ich dass das bei mir okay ist.

Kann jemand noch was zu den Funktionen vs. direkte DB-Queries sagen?

MrChicken
24.08.2014, 15:38
Hallo,

da ich nochmal eine Frage zur MySQL Performance habe, stelle ich sie mal hier mit rein.

Macht das aufteilen auf mehrere Tabellen eigentlich Sinn? Also wenn ich z.B: auf jeder Seite die Infos aus der Tabelle kontodaten und userdaten abfrage, ist dann ein LEFT JOIN schneller oder wäre es schneller wenn man beide Tabellen zu einer verschmilzt? So hat man zwar in einer Tabelle etwas mehr Spalten (11 in meinem Fall) aber würde sich ein LEFT JOIN sparen. Was wäre da von der Performance die schnellere Lösung?

auron2008
27.08.2014, 08:59
Die Aufteilung macht einen Sinn. Ich hab gelernt : Programmiere immer so das man es möglichst gut nachvollziehen kann. Eine Unterteilung bringt eine gewisse Ordnung in die Sache. Außerdem machst hast du mehr Abfragen auf Kontodaten als auf die Userdaten. Wenn alles in einer ist dann muss außerdem mehr durchsucht werden um die richtigen Spalten zu finden bei jeder Abfrage. Eine solche Abfrage (die man nicht machen sollte) "SELECT * FROM" würde noch mehr unnütze Daten Abfragen.

Wenn's dir wirklich auf die Performance ankommt dann kann ich dir nur empfehlen dich mit Mysqli zu beschäftigen.

marcaust
03.09.2014, 19:04
an MySQLi oder PDO führt so oder so kein Weg mehr vorbei da MySQL als als veraltet markiert wurde und in einer der kommenden PHP Versionen entsprechend raus fliegen wird.
Siehe hier:
http://php.net/manual/de/function.mysql-query.php

Wenn man dann schon mit MySQLi oder PDO anfängt sollte man sich auch gleich mit den prepared statements befassen -> Thema Sicherheit -> SQL Injections ...