2010-11-23 6 views
3

Gibt es eine Möglichkeit, die 1024-Byte-Schlüsselgrößenbeschränkung in MySQL zu umgehen? Im Grunde verursacht das Chaos, wenn man versucht, einen zusammengesetzten Index zu erstellen.MySQL bricht die 1024-Byte-Indexbeschränkung ab

+3

Eigentlich ist es 1000 für MyISAM; 767 für InnoDB. Veröffentlichen Sie die CREATE TABLE-Anweisung und welche Spalten Sie indizieren möchten. –

+0

Verwendung 'show create table ;' –

Antwort

3

Während ich zögere zu sagen, dass Sie etwas falsch machen (da ich nicht die vollständigen Details habe), ist es ziemlich ungewöhnlich, dass ein einzelner Schlüssel (sogar ein mehrteiliger Schlüssel) so groß ist. Ich habe Tabellen gesehen, wo das Aggregat von alle Schlüssel auf einer Tabelle groß sein kann, aber selten einen einzigen Schlüssel.

Der Schlüssel ist, einen relativ kleinen Teil der Zeile zu verwenden, um diese Zeile schnell zu finden. Wenn Sie zu dem Punkt kommen, an dem Ihre Schlüssel groß sind, müssen Sie wahrscheinlich einen Schritt zurückgehen und erneut untersuchen, warum Sie glauben, dass Sie sie so groß brauchen.

Ihre beste Wette wäre, das Schema hier zu posten, so dass wir Alternativen vorschlagen können.

Wenn Sie wirklich tun benötigen Schlüssel so groß, können Sie feststellen, dass Ihre einzige Alternative ist, zu einem anderen DBMS zu wechseln. Zum Beispiel hat DB2/z ein 8K-Limit für jeden Schlüssel. Ich schlage nicht vor Sie versuchen, hier einen Großrechner zu kaufen, es ist nur das ist die einzige DBMS ich die Grenzen kenne, aus der Spitze von meinem Kopf - natürlich sollten Sie bei einem DBMS suchen, das wird nicht ein paar Millionen Dollar kosten zu implementieren :-)

+0

Lange Rede kurzer Sinn ich den Ruby-Standard „string“ Typ wurde mit der ein 256 Zeichenfeld ist. Ich brauchte nur 50 Zeichen, also hilft das Kürzen. Ich bin überrascht, obwohl, wie ich Orakel bin es gewohnt, mit Indizierung mehrere varchar2 (4000) Felder (erteilten seine nicht unbedingt die beste Idee, solche Probleme nicht mit Feldern varcahr2 zu machen (4000), wenn Sie nur 100 oder so brauchen. –

1

Sie können Hash-Werte mit Crc32, MD5 oder ähnlichem, dann indizieren Sie den Hash.

Sie benötigen würde einen zusätzlichen Vergleich gegenüber dem ursprünglichen Feld in SQL mit Kollisionen behandeln hinzuzufügen, aber das wird nicht kostet sehr viel wie Kollisionen extrem selten sind.

Verwandte Themen