Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Kann man Tabellen Über-Indexen?!!? [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
brauche Webseite ideal für Vereine und Firmen
- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Kann man Tabellen Über-Indexen?!!?


 
sonnenfänger
02-07-2005, 16:37 
 
Hola,

Ich bin durch ein wenig Recherche auf die Möglichkeit der Index-Setzung in MySQL Tabellen gekommen und bin seitdem total begeistert.

Ich hatte nämlich drei "roh" erstellte Tabellen von denen ich was Wissen wollte. Ein Explain Select ergab dann folgendes:


table ...... rows
1 31258
2 1
3 93956


Macht - so habe ich gelesen - eine Überprüfung von 2.936.876.648 Zeilen (Alle Zeilen multipliziert)

Das konnte ich erfolgreich auf


table ...... rows
1 5
2 1
3 1


runterschrauben, nur mit Hinzufügen von Indexen .. Indizes?

Meine Frage ist, bevor ich auf die Idee komme wild in der gesamten DB rumzu-indexen, kann das Einbussen bringen? Muss ich auf irgendwas achten?!

 
onemorenerd
02-07-2005, 18:07 
 
Generell ist es immer dann gut, einen Index zu haben, wenn man durch ihn mehr gewinnt als verliert.

Beispiel: Write only. Eine Logtabelle - wird immer nur mit INSERT gefüttert und einmal im Jahr macht ein Admin ein SELECT *. Gibt es einen Index, muß der bei jedem INSERT angepaßt werden, er zahlt sich aber nie aus, weil das SELECT * ihn gar nicht braucht. Effekt zu 100% negativ.

Gegenbeispiel: Read only. Eine Tabelle mit geographischen Daten - die Welt ändert sich nicht, es wird also nur gelesen. Dabei profitiert man von einem Index, weil man nie schreibt, muß dieser nie angepaßt werden. Effekt zu 100% positiv.

In den allermeisten Fällen lohnt sich ein Index. Aber natürlich sollte er immer minimal sein, also nicht einfach "für den Fall" über alle Attribute und auch nicht für jedes Attribut einen. Stichwort functional dependencies.

 
sonnenfänger
02-07-2005, 18:15 
 
Original geschrieben von onemorenerd
In den allermeisten Fällen lohnt sich ein Index. Aber natürlich sollte er immer minimal sein, also nicht einfach "für den Fall" über alle Attribute und auch nicht für jedes Attribut einen. Stichwort functional dependencies.

Gut danke, werd ich im Hinterkopf behalten. Wenn ich es mir recht überlege habe ich zwar auch viele Schreibzugriffe, aber ich würde sagen um ein Vielfaches mehr Lesezugriffe. Ergo lohnen sich also diese Indexe für mich.

Weiss man eigentlich, was das zeitlich so ausmacht, wenn ein Index neu gesetzt werden muss? Gibt es irgendwo Beispieldaten mit und ohne Index und entsprechendem Schreib und/oder Leseverkehr? Würde mich echt interessieren, was das so in (Milli)Sekunden ausmacht oder auch Speichertechnisch (RAM wie HDD)

 
onemorenerd
02-07-2005, 20:07 
 
Kann man alles messen (http://sunsite.mff.cuni.cz/MIRRORS/ftp.mysql.com/information/benchmarks.html), aber ist die Mühe nicht wert. Lies einfach mal diese Seite (http://dev.mysql.com/doc/mysql/en/mysql-indexes.html), das sollte reichen.

- -

Alle Zeitangaben in WEZ +2. Es ist jetzt 17:23 Uhr.