Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.

mysql: index?

Ajax, Hijax, Microformats, RDF, Markup, HTML, PHP, CSS, MySQL, htaccess, robots.txt, CGI, Java, Javascript usw.
Neues Thema Antworten
Daniela
PostRank 4
PostRank 4
Beiträge: 113
Registriert: 13.09.2004, 20:09
Wohnort: Hamburg

Beitrag von Daniela » 05.11.2004, 22:46

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

Anzeige von ABAKUS

von Anzeige von ABAKUS »

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

Jetzt anfragen: 0511 / 300325-0.


robo
PostRank 8
PostRank 8
Beiträge: 837
Registriert: 23.12.2003, 19:41
Wohnort: Schwangau

Beitrag von robo » 05.11.2004, 23:05

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 :)

Daniela
PostRank 4
PostRank 4
Beiträge: 113
Registriert: 13.09.2004, 20:09
Wohnort: Hamburg

Beitrag von Daniela » 05.11.2004, 23:09

also am besten auf alles das irgendwo als where-angabe auftaucht nen index drauf und gut ist.

hmm, danke. sonst nix zu beachten?

Daniela
PostRank 4
PostRank 4
Beiträge: 113
Registriert: 13.09.2004, 20:09
Wohnort: Hamburg

Beitrag von Daniela » 05.11.2004, 23:25

was mir da noch einfällt: was ist dieser primärindex? kann der was besonderes?

robo
PostRank 8
PostRank 8
Beiträge: 837
Registriert: 23.12.2003, 19:41
Wohnort: Schwangau

Beitrag von robo » 05.11.2004, 23:27

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 :)

robo
PostRank 8
PostRank 8
Beiträge: 837
Registriert: 23.12.2003, 19:41
Wohnort: Schwangau

Beitrag von robo » 05.11.2004, 23:31

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 :)

Southmedia
PostRank 10
PostRank 10
Beiträge: 7322
Registriert: 20.07.2003, 19:56

Beitrag von Southmedia » 05.11.2004, 23:34

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.

Southmedia
PostRank 10
PostRank 10
Beiträge: 7322
Registriert: 20.07.2003, 19:56

Beitrag von Southmedia » 06.11.2004, 13:51

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.

Antworten
  • Vergleichbare Themen
    Antworten
    Zugriffe
    Letzter Beitrag