Länge eines Multi-Column-Indexes?

Länge eines Multi-Column-Indexes?

am 10.10.2006 21:55:36 von Martin Schneider

Hallo!

Ich schreibe gerade ein Script, das auf MySql >= 4.0 laufen soll. Ich
habe einen Index auf 2 varchar-Feldern liegen, beide 255 Chars groß.

Im Manual steht:
http://dev.mysql.com/doc/refman/4.1/en/indexes.html
Prefixes can be up to 1000 bytes long. (Before MySQL 4.1.2, the limit is
255 bytes for all tables.)

Ein MySql 4.1.18 sagt mir, 1000 Bytes ist das Maximum.
Ein MySql 4.0.26 sagt mir, 500 Bytes ist das Maximum.

Soll ich nun versuchen, die 255 Bytes aus dem Handbuch einzuhalten,
damit das Script läuft? Oder die 500, die ich per Fehlermeldung
herausbekommen habe? Hilfe!

Martin

Re: Länge eines Multi-Column-Indexes?

am 10.10.2006 22:30:20 von Axel Schwenke

Martin Schneider wrote:
>
> Ich schreibe gerade ein Script, das auf MySql >= 4.0 laufen soll. Ich
> habe einen Index auf 2 varchar-Feldern liegen, beide 255 Chars groß.
>
> Im Manual steht:
> http://dev.mysql.com/doc/refman/4.1/en/indexes.html
> Prefixes can be up to 1000 bytes long. (Before MySQL 4.1.2, the limit is
> 255 bytes for all tables.)

Prefix-Länge != Index-Länge

Prefixe brauchst du nur, wenn du Indexe auf BLOB Felder legen willst.
Exakter: du kannst keine kompletten BLOB (TEXT) Spalten indizieren,
sondern nur Prefixe von maximal N Bytes.

> Ein MySql 4.1.18 sagt mir, 1000 Bytes ist das Maximum.
> Ein MySql 4.0.26 sagt mir, 500 Bytes ist das Maximum.

Die maximale Index-Länge (für Mehrspalten-Indexe die Summe der Länge
der Spalten) ist u.a. abhängig von der Storage-Engine. Für MyISAM und
MySQL 4.0.x ist das Limit 500 Bytes - kann aber zur Compilezeit
geändert werden. Wenn du sicherstellen willst, daß deine Tabellen auf
jedem 4.0 Kompilat funktionieren, solltest du das 500 Byte Limit
einhalten. Alternativ kannst du InnoDB-Tabellen verwenden, da ist das
Limit auch in 4.0 schon 1024 Bytes.


XL

Re: Längeeines Multi-Column-Indexes?

am 10.10.2006 23:35:27 von Andreas Scherbaum

Hallo,

Martin Schneider wrote:
>
> Ich schreibe gerade ein Script, das auf MySql >= 4.0 laufen soll. Ich
> habe einen Index auf 2 varchar-Feldern liegen, beide 255 Chars groß.

Gegenfrage: müssen beide Spalten 255 Chars groß sein?
Wie kommst du zu genau diesem Wert in deinem Datenbankdesign?


Bye

--
Andreas 'ads' Scherbaum
Failure is not an option. It comes bundled with your Microsoft product.
(Ferenc Mantfeld)