2009-04-18 14 views
11

Ich habe eine TEXT Spalte in einer MySQL DB. Die App ist wie ein Blog und das Col enthält den Körper der "Posts". Ich werde viele komplexe boolesche Suchen in dieser Spalte durchführen.Was für eine gute Indexlänge für eine MySQL-Textspalte?

Die MySQL-Dokumentation besagt, dass Sie die Indexlänge für TEXT-Spalten mit einer maximalen Länge von 767 Byte für InnoDB-Tabellen festlegen müssen.

Sollte ich nur auf die maximale Länge einstellen? Ist es besser, es weniger zu machen?

Antwort

16

Es hängt davon ab, was Sie haben werden.

Ich vermute von Ihrer Frage, dass Sie sich vorstellen, dass ein Index für eine Spalte Dinge tun kann, die es nicht kann. Ein konventioneller Index ist kein Volltextindex und kann nicht verwendet werden, um Wörter oder eine Teilzeichenkette mit Ausnahme eines Präfixes zu finden. Datenbankindizes werden verwendet, um einen genauen Wert oder nur einen Bereich von Werten zu finden - sie können keine willkürliche Übereinstimmung durchführen.

Angenommen, Sie würden einen Index für etwas verwenden, das es tun kann, dann sollte die Länge die kürzeste Länge sein, damit Sie die gewünschten Zeilen finden können, ohne zu viele davon zu lesen. Wie lange das ist, hängt vom Inhalt Ihrer Tabelle ab, zum Beispiel wenn Ihre Tabelle viele Zeilen mit demselben Präfix hat, muss der Index länger sein als das ähnliche Präfix, um sie nicht in den gleichen Indexeintrag zu setzen - was bedeutet, dass sie alle benötigen gesucht werden.

5

Wenn Sie komplexe Boolesche Suchen durchführen, ist es sehr wahrscheinlich, dass ein normaler Index für Sie ohnehin keinen Nutzen bringt. Ich denke, Sie werden wahrscheinlich finden Sie eine full-text index.

-2

Hängt davon ab, wie viele Zeichen Sie in dieses Feld eingeben. Das kann manchmal schwer im Voraus zu wissen sein, so dass nur Sie es beurteilen können.

Kann MySQL nicht als Standard (unbegrenzt) belassen werden?

+0

Nein, tut es nicht. Nicht für TEXT. – User

Verwandte Themen