Aktivieren der große index in MariaDB 10?
In Debian Jessie ich installierte MariaDB-server 10.0.30 und ich versuchen, die Erhöhung der maximalen Schlüssellänge. AFAIU kommt es auf die config-parameter innodb_large_prefix
aktiviert wird. Nach der docs, es erfordert auch barracuda
- Datei-format und innodb_file_per_table
. Nachdem diese in der config und Neustart-server sehe ich im-client, dass diese Parameter richtig eingestellt sind:
> SHOW GLOBAL VARIABLES LIKE 'innodb_large%';
+---------------------+-------+
| Variable_name | Value |
+---------------------+-------+
| innodb_large_prefix | ON |
+---------------------+-------+
1 row in set (0.00 sec)
> SHOW GLOBAL VARIABLES LIKE 'innodb_file%';
+--------------------------+-----------+
| Variable_name | Value |
+--------------------------+-----------+
| innodb_file_format | Barracuda |
| innodb_file_format_check | OFF |
| innodb_file_format_max | Antelope |
| innodb_file_per_table | ON |
+--------------------------+-----------+
4 rows in set (0.00 sec)
> SHOW GLOBAL VARIABLES LIKE 'innodb_page%';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| innodb_page_size | 16384 |
+------------------+-------+
1 row in set (0.00 sec)
Ich bin nicht sicher, warum innodb_file_format_max
eingestellt ist Antelope
, aber während innodb_file_format_check
AUSGESCHALTET ist, sollte es egal sein. Eigentlich, auch wenn ich hatte es auch eingestellt Barracuda
es nicht gemacht Unterschied.
Wenn ich versuche, nun erstellen Sie die Tabelle mit großen index wie:
CREATE TABLE `some_table` (
`some_tableID` int(10) unsigned NOT NULL AUTO_INCREMENT,
`column` varchar(750) COLLATE utf8mb4_estonian_ci NOT NULL DEFAULT '',
PRIMARY KEY (`some_tableID`),
KEY `column` (`column`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_estonian_ci;
Bekomme ich Fehler:
ERROR 1709 (HY000): Index column size too large. The maximum column size is 767 bytes.
Auf Ubuntu 16.04 mit dem mysql-server 5.7.17 sind alle mit gleichen Einstellungen (Standard) und es gibt kein problem mit großen index (für utf8mb4 es ist 750*4 = 3000).
Was ist Los mit meinem MariaDB-setup?
- Und wenn Sie hinzufügen
ROW_FORMAT=DYNAMIC
? - nicht mehr, da gab bis auf MariaDB um und ging zurück zu MySQL
- FWIW es nicht mit MariaDB, MySQL 5.6 hat das gleiche Problem. Es ist auch kein Problem, in MariaDB 10.2.
- Siehe stackoverflow.com/a/52778785/2137210 für die Lösung
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bedarf es mehr als nur diese zwei Einstellungen...
Vielleicht alles, was Sie brauchen, ist zum hinzufügen
ROW_FORMAT=...
zu IhremCREATE TABLE
.Diese Anweisungen sind erforderlich für 5.6.3 bis zu 5.7.7. Beginnend mit 5.7.7, die system-defaults korrekt zu verarbeiten größere Felder.
Alternativ können Sie einen "Präfix" index:
(Aber Präfix-Indizierung ist fehlerhaft in vielerlei Hinsicht.)
", Wenn der server später schafft eine höhere Tisch-format, innodb_file_format_max auf den Wert gesetzt" bedeutet, dass die Einstellung nicht ein Problem.
ROW_FORMAT=DYNAMIC
inCREATE TABLE
-Erklärung war das fehlende Stück. Danke!!!ALTER TABLE
können Sie festlegeninnodb_default_row_format=DYNAMIC
bevor Sie ihn erstellen. In jedem Fall würde ich hinzufügen, alle diese globalen Werte für die server-Konfiguration. Speichert die Erinnerung an all dies das nächste mal etwas schaffen will, die "großen" Indizes.innodb_large_prefix
gilt nur fürCOMPRESSED
undDYNAMIC
Zeile formatiert.MariaDB 10.0 und 10.1 haben InnoDB-5.6, die standardmäßig erstellt Tabellen mit
ROW_FORMAT=Compact
(auch wenninnodb_file_format
eingestellt istBarracuda
). Also, große Präfixe, müssen Sie das format Zeile explizit. Gleiche gilt für MySQL 5.6.InnoDB 5.7 standardmäßig erstellt die Tabelle mit
ROW_FORMAT=DYNAMIC
, das ist der Grund, warum die gleichenCREATE
sich aufinnodb_large_prefix
funktioniert in MySQL 5.7 und MariaDB 10.2 ohne zusätzliche Klauseln.