WebWork Magazin - Webseiten erstellen lassen, Online Medien, html

Webhoster, Webhosting Provider und Domain registrieren

Home | Registrieren | Einloggen | Suchen | Aktuelles | GSL-Webservice | Suleitec Webhosting
Reparatur-Forum | Elektro forum | Ersatzteilshop Haushalt und Elektronik


Homepage und Webhosting-Forum

Scripte und Programme für PHP, MYSQL. Diskussionen zur Programmierung im Web. Fragen zu CMS, Blogsoftware, Shops, Newsletter und vielen weiteren Scripten.


Forum » PHP & MySQL » Indizes & Cache von MySQL » Antworten
Benutzername:
Passwort: Passwort vergessen?
Inhalt der Nachricht: Fett | Kursiv | Unterstrichen | Link | Bild | Smiley | Zitat | Zentriert | Quellcode| Kleiner Text
Optionen: Emailbenachrichtigung bei Antworten
 

Indizes & Cache von MySQL
von NetDrag
ne, is datenbank intern, sql und php haben gar nichts damit zu tun.

planen mußt du ihn schon, d.h die größe sodaß oft benötigte abfragen im cache bleiben, auch wenn neue querys dazu kommen.

Nur bringt dir der cache wahrscheinlich nichts, weil bei einer gut geplanten datenbank wirkt er erst wenn die datenbank etwas größer ist, was bei webapplikationen selten der fall ist.

gib mal eine deiner sql abfragen im commandline client von mysql ein, dann siehst du ja wie lange die abfrage dauert. der query-cache liegt meist bei 0,2 sekunden.
von Bastian_W
hi...

meine Frage ziehlte mehr daraufhin ob ich einen zustäzlichen Befehl in meinem PHP Programm einbauen muß?


Wie frage ich den den Status ab?
Per PHP???
von toc22
Der Q-Cache ist ab Version 4 von MYSQL enthalten.
In dem Q-Cache werden Querys und deren Ergebnismengen gespeichert. Wenn das gleiche Statement mehrmals benutzt wird und die betroffenen Datensätze sich nicht verändert haben, wird das Ergebnis aus dem Cache geliefert. Bei einem kleinen Cache kann es allerdings sehr schnell vorkommen, dass ältere Statements überschrieben werden.
In Szenarien, in denen häufig auf Bestandsdaten zugegriffen wird, kann dieser Cache enmorme Geschwindigkeitssteigerungen bewirken. Besonders bei komplexen Statements kann der Q-C sehr wirkungsvoll sein, da das zeitaufwendige Parsen der Statements entfällt. Bei Bewegungsdaten, dürften die Geschwindigkeitssteigerungen ehere gering sein.

Man kann die Effiezienz des Q-C. in einer speziellen Situatuion sehr leicht bewerten:

show status;


Aktiviert wird der Q-Cache wie folgt:
unter Linux in /etc/my.cnf
[mysqld]
...
query_cache_size=500K
...

Hier gibt es eine sehr gute Doku zum Q-C:
http://www.mysql.com/doc/en/Query_Cache.html
von Bastian_W
Ok... habe ich mitlerweile gut verstanden... nur was ist der

Query-Cache???

Wie stelle ich den ein bzw. benutze den?
von NetDrag
Also index über Fulltext hat keinen Sinn. Du muß dir das so vorstellen:

Eine Datenbank ist ja nichts anderes als ein Programm das in einer Datei mit einem genauen Schema nach einträgen sucht. Also
Column ID | Column Name | Column Beschreibung
1 | Name1 | Eine ziemlich lange Beschreibung zu diesem Link
2 | Name2 | Eine sehr sehr Lange Beschreibung zu Link 2
usw.

Da das DatenbankSystem ja nicht weiß wo genau die 2 Zeile anfängt, muß es erst Zeile 1, durchgehen bis es weiß wo Zeile 2 anfängt. Vereinfacht ist der Index eine Liste die dem DBMS genau sagt wo der 2. Eintrag liegt. So geht der Zugrifff ziemlich schneller.

1 | Position 1
2 | Position 2

Wenn jetzt in Index auch noch ein langer Text steht macht der Index ja keinen Sinn mehr da dann der Index gleich lang wird wie dir Tabelle
von Bastian_W
Hi, Danke schonmal für die Erklärung.

Meine Frage ziehlt auf einen Bereich hin, wo User einen Link eintragen verschicken und bewerten können. Wenn der Eintrag einmal drinn ist, ändert der sich nicht mehr. Was sich ändert währe die Bewertung. Die lasse ich dann nach deiner Erklärung auch mal aus dem Index raus.

Ich nutze den Typ: MyISAM

zur Zeit ist die Datenbank 9,7MB groß... wächst aber stetig an, wenn man bedenkt, das die erst 1 Monat alt ist und schon 9,7MB fasst (Allerdings nicht alleine dieses Link System *g*).

Wenn ich richtig verstanden habe zählt zu den Dingen die man NICHT in den Index packen sollte auch: FULLTEXT, allerdings ändert sich dieser Text nicht, da es die Beschreibung für den Link den ich oben angesprochen habe ist.

Kann man die Performance einer MySql Datenbank irgendwie anzeigen oder ausgeben lassen? Damit ich prüfen könnte welche Einstellungen am sinvollsten sind? Und was ist der Unterschied zwischen einem Index über eine oder mehrere Spalten?
von NetDrag
Indize sind das um und auf in einer Datenbank. Es ist so eine Art eigene Liste die auf Tupel d.h. Zeilen in einer Tabelle zeigt.

Der Inex wird bei einem Insert oder Update neu erstellt.
Wenn sich nicht alle 0,2 Sekunden was ändert oder die Datenbank nicht mehrere 100 MB groß ist dann hast du kein Problem wenn du einen index über was legst das sich ändert.

Vermieden sollten Datentypen werden die recht groß sind, wie blob, text oder eventuell auch ein großer varchar. Integer gehen normalerweise in ordnung da sie ziemlich leicht verglichen werden können. Aber das ist wirklich nur wichtig wenn du extrem auf Performance schaust und das wirkt asich bei einer kleinen Datenbank nicht stark aus.

Dann kommts natürlich auch drauf an ob du einen index über eine einzelne Spalte oder über mehrere Spalten anlegst.

Wie groß ist eigentlich die Datenbank und was für datentypen verwendest du?
von Bastian_W
Wie stelle ich am besten die Indizes ein? Laut der Referenz hier:

http://www.mysql.com/doc/en/Optimising_Database_Structure.html <--- Englisch
http://www.mysql.com/doc/de/Optimising_Database_Structure.html <----Deutsch

ist das eine Art Cache... ich habe bis jetzt immer alles in die Indizes aufgenommen, was sich eher selten ändert, und was ich für die "where XY" und "order by Z" Teil von dem "mysql_query" Befehl benötige... allerdings weiß ich nicht, ob das richtig ist, oder ob das Leistungseinbußen bringt. Habe mal gelesen, dass das Indexieren auf möglichst kleine Zeilen beschränkt werden sollte

Edit: Schreibfehler im Link behoben

---
Bastian_W
------
Real programmers don't comment their code. It was hard to write, so it should be hard to read.

Nach oben