Ответ 1
Если я правильно понимаю, вы используете 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 символов.