Seite 1 von 1

mysql: index?

Verfasst: 05.11.2004, 22:46
von Daniela
noch ein paar fragen zu mysql, diesmal zum index:

wann und wie sollte man einen index bei mysql nutzen?
wann ist ein volltextindex sinnvoll?
welche nachteile haben indexe? speicherverbrauch?

grüße - daniela

Verfasst:
von
SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


Re: mysql: index?

Verfasst: 05.11.2004, 23:05
von robo
Daniela hat geschrieben:wann und wie sollte man einen index bei mysql nutzen?
Wenn Tabellen grösser werden (>1000 Einträge) und die Datenbankabfrage dadurch langsam. Man sollte aber Indizes nur auf die Spalten legen, die über WHERE abgefragt werden bzw. die für JOINs benutzt werden.
Daniela hat geschrieben:wann ist ein volltextindex sinnvoll?
Wenn man Textfelder hat, die man schnell durchsuchen können will. Der Volltextindex ab MySQL 4 ist übrigens affenschnell! War selbst erstaunt, als ich das das erste Mal getestet habe!
Daniela hat geschrieben:welche nachteile haben indexe? speicherverbrauch?
Jepp, hält sich aber in Grenzen. Und INSERTs werden langsamer, weil ja jedes Mal der Index mit upgedatet werden muss.

cu, Robo :)

Verfasst: 05.11.2004, 23:09
von Daniela
also am besten auf alles das irgendwo als where-angabe auftaucht nen index drauf und gut ist.

hmm, danke. sonst nix zu beachten?

Verfasst: 05.11.2004, 23:25
von Daniela
was mir da noch einfällt: was ist dieser primärindex? kann der was besonderes?

Verfasst: 05.11.2004, 23:27
von robo
Daniela hat geschrieben:also am besten auf alles das irgendwo als where-angabe auftaucht nen index drauf und gut ist.
Nicht wirklich. Felder zu indizieren, deren Inhalte bei vielen Datensätzen gleich sind, bringt relativ wenig. Am meisten brint ein Index, wenn das Feld, auf dem der Index liegt, bei möglichst vielen Datensätzen verschiedene Inhalte hat. Bei Strings indiziert man nicht den kompletten String, sondern nur den Anfang (Ausnahme: Volltextindex, aber das ist ja auch eine andere Art von Index).

Lies dir mal https://dev.mysql.com/doc/mysql/de/Query_Speed.html durch, mit allen Unterkapiteln (vor allem https://dev.mysql.com/doc/mysql/de/EXPLAIN.html )! Dann bist du vielleicht schlauer und weisst, auf welche Felder du Indizes setzen musst.

Aus der Originaldoku:
Mit der Hilfe von EXPLAIN können Sie erkennen, wo Sie Tabellen Indexe hinzufügen müssen, um ein schnelleres SELECT zu erhalten, das Indexe benutzt, um die Datensätze zu finden.
cu, Robo :)

Verfasst: 05.11.2004, 23:31
von robo
Daniela hat geschrieben:was mir da noch einfällt: was ist dieser primärindex? kann der was besonderes?
Du meinst den PRIMARY KEY? Also das sind wirklich die absoluten Basics, du solltest dir wirklich mit Hilfe der genannten Quellen erst mal ein solides Grundlagenwissen aneignen, bevor du anfängst, mit Indizes etc. zu hantieren ...

cu, Robo :)

Verfasst: 05.11.2004, 23:34
von Southmedia
Naja robo, ich habs ehrlich gesagt auch so gelernt weil die Docs doch seeehr abstoßend aussehen.

Der Primary Key (=> Primärschlüssel) ist ein eindeutiger Bezeichner für jede Tabellenzeile. Meist ist das ne durchgehende ID oder sowas. So nen Wert sollte man ja immer haben um genau eine bestimmte Zeile rausschmeissen zu können.

Trotzdem wäre nachlesen wohl nicht die schlechteste Idee.

Verfasst: 06.11.2004, 13:51
von Southmedia
Weils grade so schön passt:

Ich habe hier eine Tabelle mit ~ 100 000 Einträgen. Ein paar Spalten sind varchars, ein paar sogar text - also ziemlich speicherfressend das ganze. Zu guter letzt habe ich in einer Spalte nen php-timestamp.

Wenn ich nun eine Abfrage geordnet nach dem Timestamp gemacht habe und mir da die ersten 20 Ergebnisse ausgegeben habe hat das ca mindestens 20 Sekunden gedauert.

Da ist mir aufgefallen dass ich gar keinen Index auf den timestamp habe. Gemacht, hat gut 2 Minuten gedauert, aber jetz mit dem Index auf die Spalte timestamp dauert die Abfrage noch ca 0,001 Sekunden.