Ако разбирам правилно, използвате UUID в основната си колона? Хората ще кажат, че обикновен (целочислен) първичен ключ ще бъде по-бърз, но има друг начин да се използва тъмната страна на MySQL. Всъщност MySQL използва по-бърз двоичен файл от всичко друго, когато се изискват индекси.
Тъй като UUID е 128 бита и се записва като шестнадесетичен, е много лесно да се ускори и съхрани UUID.
Първо, от вашия език за програмиране премахнете тирета
От 110E8400-E29B-11D4-A716-446655440000
до 110E8400E29B11D4A716446655440000
.
Сега е 32 знака (като MD5 хеш, с който това също работи).
Тъй като един BINARY
в MySQL е с размер 8 бита, BINARY(16)
е размерът на UUID (8*16 =128).
Можете да вмъкнете с помощта на:
INSERT INTO Table (FieldBin) VALUES (UNHEX("110E8400E29B11D4A716446655440000"))
и заявка с помощта на:
SELECT HEX(FieldBin) AS FieldBin FROM Table
Сега във вашия език за програмиране поставете отново тирета на позиции 9, 14, 19 и 24, за да съответстват на оригиналния си UUID. Ако позициите винаги са различни, можете да съхраните тази информация във второ поле.
Пълен пример:
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`
Ако искате да използвате тази техника с който и да е шестнадесетичен низ, винаги правете length / 2
за дължината на полето. Така че за sha512 полето ще бъде BINARY (64)
тъй като sha512 кодирането е дълго 128 знака.