Wenn ich das richtig verstehe, verwenden Sie UUIDs in Ihrer Primärspalte? Die Leute werden sagen, dass ein regulärer (ganzzahliger) Primärschlüssel schneller ist, aber es gibt eine andere Möglichkeit, die dunkle Seite von MySQL zu nutzen. Tatsächlich verwendet MySQL Binärdateien schneller als alles andere, wenn Indizes erforderlich sind.
Da die UUID 128 Bit beträgt und hexadezimal geschrieben ist, ist es sehr einfach, die UUID zu beschleunigen und zu speichern.
Entfernen Sie zunächst in Ihrer Programmiersprache die Bindestriche
Von 110E8400-E29B-11D4-A716-446655440000bis 110E8400E29B11D4A716446655440000.
Jetzt sind es 32 Zeichen (wie ein MD5-Hash, mit dem dies auch funktioniert).
Da eine Single BINARYin MySQL 8 Bit groß BINARY(16)ist, entspricht sie der Größe einer UUID (8 * 16 = 128).
Sie können einfügen mit:
INSERT INTO Table (FieldBin) VALUES (UNHEX("110E8400E29B11D4A716446655440000"))
und Abfrage mit:
SELECT HEX(FieldBin) AS FieldBin FROM Table
Fügen Sie nun in Ihrer Programmiersprache die Bindestriche an den Positionen 9, 14, 19 und 24 erneut ein, um sie an Ihre ursprüngliche UUID anzupassen. Wenn die Positionen immer unterschiedlich sind, können Sie diese Informationen in einem zweiten Feld speichern.
Vollständiges Beispiel:
CREATE TABLE `test_table` (
`field_binary` BINARY( 16 ) NULL ,
PRIMARY KEY ( `field_binary` )
) ENGINE = INNODB ;
INSERT INTO `test_table` (
`field_binary`
)
VALUES (
UNHEX( '110E8400E29B11D4A716446655440000' )
);
SELECT HEX(field_binary) AS field_binary FROM `test_table`
Wenn Sie diese Technik mit einer beliebigen Hex-Zeichenfolge verwenden möchten, verwenden Sie immer length / 2die Feldlänge. Für einen sha512 wäre das Feld also, BINARY (64)da eine sha512-Codierung 128 Zeichen lang ist.