Index erzeugen bei mysql

Hallo,

Ich habe eine Tabelle, bei der ich gern einen Index hätte. Die Tabelle ist schon prall gefüllt, also kann ich nicht einfach mit create eine neue, bereits indiierte, erzeugen.

Dummerweise habe ich keine php-Unterstützung auf dem Rechner. Einzig JSP geht. Daher bleibt mir wohl nichts anderes übrig, als das mit SQL zu machen. Nur wie?

Der Index soll übrigens über eine Spalte mit Datum und Uhrzeit gelegt werden. Ungefährt 400.000 Zeilen. Macht das überhaupt einen Sinn? Am Ende will ich alle Zeilen eines Tages auslesen. Sone Anfrage dauert im Moment bis zu 30 Sekunden. Dabei kommen da nur etwa 2000 zeilen pro Tag vor.

Danke schonmal,

Günther

Hallo,

Ich habe eine Tabelle, bei der ich gern einen Index hätte. Die
Tabelle ist schon prall gefüllt, also kann ich nicht einfach
mit create eine neue, bereits indiierte, erzeugen.

Bitte was?

Dummerweise habe ich keine php-Unterstützung auf dem Rechner.
Einzig JSP geht. Daher bleibt mir wohl nichts anderes übrig,
als das mit SQL zu machen. Nur wie?

http://dev.mysql.com/doc/refman/5.0/en/create-index…
Also normalerweise einfach:
CREATE INDEX index_name ON tabelle (spalte);

Der Index soll übrigens über eine Spalte mit Datum und Uhrzeit
gelegt werden. Ungefährt 400.000 Zeilen. Macht das überhaupt
einen Sinn? Am Ende will ich alle Zeilen eines Tages auslesen.
Sone Anfrage dauert im Moment bis zu 30 Sekunden. Dabei kommen
da nur etwa 2000 zeilen pro Tag vor.

Die Geschwindigkeit hat nichts mit der Ergebnismenge zu tun, da er nunmal bei einer nicht indexierten Spalte ALLE Datensätze vergleichen muss! :wink:

Grüße,
boog

Ich habe eine Tabelle, bei der ich gern einen Index hätte. Die
Tabelle ist schon prall gefüllt, also kann ich nicht einfach
mit create eine neue, bereits indiierte, erzeugen.

Bitte was?

ähm indiZierte sollte das heißen.

http://dev.mysql.com/doc/refman/5.0/en/create-index…
Also normalerweise einfach:
CREATE INDEX index_name ON tabelle (spalte);

Wird der Index dann automatisch aktualisiert? Oder muss ich das immermal wiederholen?

Warum muss ich denn da einen Namen vergeben? Spielt der bei der Abfrage eine Rolle?

Danke nochmal, hat mir schon sehr geholfen.

Die Geschwindigkeit hat nichts mit der Ergebnismenge zu tun,
da er nunmal bei einer nicht indexierten Spalte ALLE
Datensätze vergleichen muss! :wink:

Ich weiß, ich wollte nur verdeutlichen, dass die ausgegebene Datenmenge eben nicht im Verhältnis zur Wartezeit steht. Ich wollte halt sowas verhindern, wie „vielleicht ist deine Leitung zu dünn“. Außerdem dachte ich, der Vollständigkeit halber gehört es irgendwie dazu.

Günther

Ich habe eine Tabelle, bei der ich gern einen Index hätte. Die
Tabelle ist schon prall gefüllt, also kann ich nicht einfach
mit create eine neue, bereits indiierte, erzeugen.

Bitte was?

ähm indiZierte sollte das heißen.

Ich wollte damit mein Erstaunen ausdrücken! :wink:
Warum sollte man soetwas tun?

http://dev.mysql.com/doc/refman/5.0/en/create-index…
Also normalerweise einfach:
CREATE INDEX index_name ON tabelle (spalte);

Wird der Index dann automatisch aktualisiert? Oder muss ich
das immermal wiederholen?

Ja.
Nein.

Ein Index fragmentiert aber, wenn viele Datensätze geändert oder gelöscht werden.

D.h. der Index sollte bei starker Fragmentierung neu angelegt werden.
Ich weiss nicht, ob MySQL einen REBUILD eines Index unterstützt, aber ich vermute nicht. Also einfach alle paar Tage/Wochen löschen und neu anlegen, natürlich nur wenn die Performance auch wirklich in den Keller gegangen ist.

Auch die Statistiken einer Tabelle, also der „Plan“ des SQL Servers, welchen Index er in welchem Fall benutzen soll, sollte hin und wieder aktualisiert werden: http://dev.mysql.com/doc/refman/5.0/en/analyze-table…
Es kann nämlich nach einiger Zeit passieren, dass der entsprechende Index gar nicht mehr benutzt wird. Das bekommst Du natürlich auch direkt an der mangelnden Performance zu spüren.

Warum muss ich denn da einen Namen vergeben? Spielt der bei
der Abfrage eine Rolle?

Damit man den Index auch wieder ändern/löschen kann?
Nein.

Danke nochmal, hat mir schon sehr geholfen.

Bitte.

Grüße,
boog

P.S.: Kauf Dir mal ein Buch über SQL! :smile:
z.B. http://www.amazon.de/gp/product/3897212684/