mysql-Optimierung Indexierung
hemmen
- datenbank
0 Frank (no reg)0 hemmen0 lulu0 hemmen0 Vinzenz Mai0 hemmen0 Frank (no reg)
0 Frank (no reg)
0 Hamstar
Hallo,
was versteht man unter der Optimierug einer mysql-Tabelle?
Habe sowas gelesen wie Indexierung usw. was ist das?
Was gibt's noch für Möglichkeiten zu optimieren?
Habe auch was über verschiedene Tabellen-Typen (oder Datenbanktypen) gehört, die man selbst wählen kann und die anschienend alle bestimmet Vor- und Nachteile haben...?
Kennt jemand ne Seite, wo die verschiedenen Tabellen-Typen erklärt werden.
mfg
Servus,
wenn du ein grösseres Fachbuch hast, dann gibt es da am Ende meistens
soetwas was man "Index" nennt, wo dann Begriffe drin stehen und auf
welchen Seiten des Buches diese auftauchen. Dabei hast du über den
eigentlichen Begriffen nocch eine Gruppierung nach Anfangsbuchstaben (N, O, P, Q ...) was dir das Auffinden erleichtert.
Gleiches Prinzip bei relationalen Datenbanken. :)
Ciao, Frank
danke
find aber kein für mich verständliches tutorial...
ab wann braucht man wohl so ne indexierung?
oder ist es immer sinnvoll?
grüßele
Huhu
find aber kein für mich verständliches tutorial...
Dann sag mal welche Du Dir schon angeschaut hast und warum sie für Dich unverständlich sind.
Damit man Dir ggf. ein anderes empfehlen kann.
Viele Grüße
lulu
hi,
habe halt bei der mysql manula nachgelesen und im großen wieten www gesucht, aber immer nicht weiter als der ertse absatz gekommen, da schon der unverständlich für mich war und schon zuweit in die materie einging, von der ich keinerlei vorahnung habe.
ab wann braucht man wohl so ne indexierung?
oder ist es immer sinnvoll?
Hallo
habe halt bei der mysql manula nachgelesen und im großen wieten www gesucht, aber immer nicht weiter als der ertse absatz gekommen, da schon der unverständlich für mich war und schon zuweit in die materie einging, von der ich keinerlei vorahnung habe.
ich zitiere aus dem von Hamstar verlinkten MySQL-Handbuch:
<zitat>
Alle MySQL-Datentypen lassen sich indizieren. Die Verwendung von Indizes
der relevanten Spalten ist die beste Möglichkeit, die Leistung von
SELECT-Operationen zu optimieren.
</zitat>
Wenn Du diesen Absatz bereits nicht verstehst, dann weiß ich nicht, wie wir Dir hier weiterhelfen können.
ab wann braucht man wohl so ne indexierung?
Es ist dann sinnvoll, einen Index auf eine Spalte zu setzen, wenn Du häufig Suchoperationen auf dieser Spalte hast oder häufig nach dieser Spalte sortierst.
oder ist es immer sinnvoll?
Nein. Wären Indexe stets sinnvoll, so würden sie bereits automatisch angelegt. Indexe verlangsamen Einfüge- und Löschoperationen, sowie Änderungen bei Werten der indexierten Spalte. Einen Index zu pflegen ist eben zusätzlicher Aufwand. Ob sich der Aufwand lohnt, das läßt sich nicht allgemein sagen, nur im speziellen Fall.
Was bringt ein Index?
Im folgenden vereinfache ich die Problemstellung.
Stell Dir folgenden Fall vor: Du hast 1000 Datensätze, davon benötigst Du einen bestimmten, mit einem bestimmten Wert in der Suchspalte. Ohne Index benötigst Du im Durchschnitt 500 Suchoperationen, um den Datensatz zu finden, mit Index (ich vereinfache hier auf die binäre Suche und einen eindeutigen Index) hast Du den gewünschten Datensatz bereits mit 10 Suchoperationen gefunden.
Bei 1 Million Datensätze benötigst Du ohne Index im Mittel 500.000 Suchoperationen, mit Index gerade einmal 100, bei 1 Milliarde Datensätze ohne Index im Mittel 500.000.000 Operationen, mit Index nur 1.000. Erkennst Du das Potential, das in einem Index steckt.
Noch größer ist der Unterschied beim Sortieren :-)
Ein Beispiel dafür, wann sich ein Index definitiv nicht lohnt:
Bei Spalten, die viele gleiche Werte enthalten, z.B. in einer Personenliste die Kennzeichnung des Geschlechts, lohnt sich hingegen ein Index nicht.
Freundliche Grüße
Vinzenz
Hi,
dangge...
also den von dir zitierten Satz habe ich schon vertsnaden aber dann...
Ich würde gern das ganze von Grund auf kennen lernen...
Dieser Primary Schlüssel oder so ist ja dann schon ein socher Index?
Also wann man dann einen Index für eine Spalte verwendet ist mir klar, wie der dann aber verwendet wird beim Suchvorgang, sodass es nurnoch so wenige Suchoperationen sind bleibt mir jedoch noch ein Rätsel. Auch verlangsame ich doch anscheinen mit jedem Index die INPUT UPDATE und DELETE Befehle? Und welche länge für welchen Index ist sinnvoll?
Lauter so Frgane, die ich einfach gerne durch ein schönes Tutorial lernen würde...
Hi,
das Leben ist kein Ponyhof und es gibt nicht für alle Dinge immer ein
Tutorial. Datenbanken und Indexierung ist a) Kenntnis des DBMS auf Basis Betriebshandbuch b) Erfahrung im Umgang damit
Ja, der Primärschlüssel eines Datensatz ist für gewöhnlich ein Index. Er identifiziert den Datensatz eindeutig.
Einen Index verwendest du bei einer Abfrage, in dem du ihn eigentlich gar nicht verwendest. Du legst ihn einmal für die Spalte an, wo er sinnvoll geeignet ist (hat ja Vincenzo bereits beschrieben). Das DBMS weiss dann bei der Erstellung des Ausführungsplans für die Abfrage (EXPLAIN / SHOW PLAN) ob es a) zum einen einen Index für die Spalten/Auswahl-Kriterien gibt und b) dieser auch einen Vorteil bei der Benutzung mit sich bringt. Das wird unter anderem aus Statistiken über Tabellen und deren Spalten gewonnen. Über zusammengesetzte Indizes und Reihenfolge von Suchargumenten will ich jetzt mal noch nichts schreiben, das führt zuweit.
Ein Index bedeutet auch Daten, die physikalisch irgendwo abgelegt werden müssen. Destomehr Indexe destomehr müssen diese verwaltet werden, dhzb: Aufsplitten, neu ordnen wenn ein neuer Schlüsselwert in den Index eingefügt wird usw. Das bedeutet zusätzlichen Aufwand für das DBMS.
Die optimale Länge/Breite/Grösse eines Index lässt sich nicht pauschal bestimmen, aber du solltest keine Blobs oder varchar(4000) Felder mit einem Index belegen ...
Wieviel Ahnung hast du bis jetzt von relationalen Datenbanken?
(Ich kann auch nicht gleich mit dem Driver schlagen wollen, wenn ich nicht schon mit einem Eisen einen vernünftigen 3/4 Schwung hinbekomme)
Cheers,
Frank
das Leben ist kein Ponyhof [...]
LOL - man kann halt nicht alles mit Sahnehäubchen haben.
dannge für deine hilfe...sry aba bin halt a schwerer schüler ^^
Also so grob wie ein Index funktioniert habe ich jetzt erkannt.
Habe aber so Sachen gelesen, dass man bestimmten Spalten mit varchar(4000) einen Index über die ertsen x Zeichen machen kann, das meinte ich mit welche Länge ist bei sowas sinnvoll...dass ein 4000-ndex sinnlos ist hab ich mir schon gedacht ^^
Hab schonmal bissle mit EXPLAIN rumgemacht, leider hab ich es nicht auf die Reihe gekriegt, mir die Daten dann auch mit php ausgeben zu lassen, dann wäre die Spielerei/Testerei einfacher...
Wie kann ich denn sonst so feststellen, wann ein Index sinnvoll wäre, auf welches Feld ich in lege mit welcher Länge und wann es sich überhauüt lobt in bezug auf die verlangsamung der INSERT, DELET usw aktionen...
Also vom Aufbau von Datenbanken habe ich eher keine Ahnung, verwenden tu ich sie schon länger mit php --> daten ausgeben löschen ändern, tabellen anlegen usw ist kein problem für mich, nur die theorie dahinter, und immer die schönste lösung zu finden...hohl daten meist mit mysql_fetch_object raus, was ja net unbedingt das betse ist.
...deswegen fragte ich ja nach einem tutorial...^^ aber privatlehre is au net schlecht...
grüß
Hi,
dannge für deine hilfe...sry aba bin halt a schwerer schüler ^^
gern geschehen, nicht jeder hat die Weisheit mit Löffeln gefressen ;)
Ich auch nicht. Habe auch mal unwissend angefangen, allein erfreut darüber dass ich Daten abrufen kann. ...
Für grosse Textfelder gibt es ja nach DBMS die Möglichkeit einen Volltextindex zu erzeugen, er funktioniert etwas anders als die normalen Indexe. Nur die ersten 10 Zeichen eines solchen Feldes als Index zu benutzen hilft dir nicht wirklich, wenn du nach einem Wort mittendrin oder am Ende der 4000 Zeichen suchst. -> Zum "Volltextindex" solltest du online genügend Literatur finden und ansonsten gilt: Probieren geht über Studieren.
Hab schonmal bissle mit EXPLAIN rumgemacht
Ich "mache" für mein Leben gern mit Natasha "rum". ;) Du solltest via PHPMyAdmin, einem webbasierten Frontend für MySQL in der Lage sein, die Ausgaben von EXPLAIN anzeigen zu lassen, so dass du sie deuten kannst. Via PHP und Script kann ich dir jetzt gar keinen Tipp geben. :(
Wenn ein Index sinnvoll sein könnte, kannst du unter anderem durch Auszählen der Verwendung in
Das mit der Häufigkeit wurde imho schon mal hier in dem Thread erwähnt. Eine Spalte die nur 3 verschiedene Werte aufweist, lohnt sich nicht zu indexieren.
Also: Nächste Schritte: Analysiere deine Abfragen, verwende bei mehreren WHERE-Argumenten immer die selbe Reihenfolge, die auch der Reihenfolge der Werte in einem Index (bei zusammmengesetzten) entspricht.
Grüessli
Frank
Hi,
ich gebe zu, der Wikipedia Artikel zu Datenbankindex ist etwas knapp, aber das Hamstar hat dir bereits ja Links zum mysql Handbuch gegeben. Dort findest du sicher auch eine Beschreibung wie Indexe in mysql zu handhaben sind.
Wozu braucht man die Indexierung? Wozu brauchst du sie in einem dicken Buch? ... zur Erschliessung des Inhaltes über Stichwörter. Du suchst nach Passagen die Stichwort X enthalten ... in der Datenbank suchst du dann entsprechend nach Datensätzen die einem bestimmten Kriterium (von einem Index abgedeckt) entsprechen, z.b. alle Kundendatensätze die in A-Städten wohnen. (Dann brauch die DB nicht die Spalte Ort in jedem Datensatz einzeln vergleichen sondern weiss welche Datensätze überhaupt in Frage kommen)
Cheers,
Frank
Kennt jemand ne Seite, wo die verschiedenen Tabellen-Typen erklärt werden.
http://dev.mysql.com/doc/refman/5.1/de/index.html
http://dev.mysql.com/doc/refman/5.1/de/optimization.html
http://dev.mysql.com/doc/refman/5.1/de/indexes.html
http://dev.mysql.com/doc/refman/5.1/de/storage-engines.html