Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да съхраня uuid като число?

Ако разбирам правилно, използвате 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 знака.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Обяснена функция на MySQL IF().

  2. MySQL:Не може да се създаде таблица (errno:150)

  3. Ръководство за разбиране на моделите за мащабиране на базата данни

  4. Предоставяне на разрешения на потребител на MySQL в Linux чрез командния ред

  5. SQL:Повторете ред с резултати няколко пъти и номерирайте редовете