Jeśli dobrze rozumiem, używasz identyfikatorów UUID w swojej głównej kolumnie? Ludzie powiedzą, że zwykły (całkowity) klucz podstawowy będzie szybszy, ale istnieje inny sposób wykorzystania ciemnej strony MySQL. W rzeczywistości MySQL szybciej używa plików binarnych niż cokolwiek innego, gdy wymagane są indeksy.
Ponieważ UUID ma 128 bitów i jest zapisany w systemie szesnastkowym, bardzo łatwo jest przyspieszyć i zapisać UUID.
Najpierw w swoim języku programowania usuń myślniki
Od 110E8400-E29B-11D4-A716-446655440000
do 110E8400E29B11D4A716446655440000
.
Teraz ma 32 znaki (jak hash MD5, z którym to również działa).
Ponieważ pojedynczy BINARY
w MySQL ma rozmiar 8 bitów, BINARY(16)
to rozmiar identyfikatora UUID (8*16 =128).
Możesz wstawić za pomocą:
INSERT INTO Table (FieldBin) VALUES (UNHEX("110E8400E29B11D4A716446655440000"))
i zapytaj używając:
SELECT HEX(FieldBin) AS FieldBin FROM Table
Teraz w swoim języku programowania wstaw ponownie myślniki w pozycjach 9, 14, 19 i 24, aby dopasować oryginalny UUID. Jeśli pozycje są zawsze różne, możesz zapisać te informacje w drugim polu.
Pełny przykład:
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`
Jeśli chcesz użyć tej techniki z dowolnym ciągiem szesnastkowym, zawsze wykonuj length / 2
dla długości pola. Więc dla sha512 pole to BINARY (64)
ponieważ kodowanie sha512 ma długość 128 znaków.