Якщо я правильно розумію, ви використовуєте 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 символів.