sql >> Databáze >  >> RDS >> Mysql

Jak uložit uuid jako číslo?

Pokud tomu dobře rozumím, používáte UUID ve svém primárním sloupci? Lidé budou říkat, že běžný (celočíselný) primární klíč bude rychlejší, ale existuje i jiný způsob, jak využít temnou stránku MySQL. Ve skutečnosti je MySQL rychlejší při použití binárních souborů než cokoli jiného, ​​když jsou vyžadovány indexy.

Protože UUID je 128 bitů a je zapsáno jako šestnáctkové, je velmi snadné UUID urychlit a uložit.

Nejprve ve svém programovacím jazyce odstraňte pomlčky

Od 110E8400-E29B-11D4-A716-446655440000 na 110E8400E29B11D4A716446655440000 .

Nyní je to 32 znaků (jako hash MD5, se kterým to také funguje).

Od jediného BINARY v MySQL má velikost 8 bitů, BINARY(16) je velikost UUID (8*16 =128).

Můžete vložit pomocí:

INSERT INTO Table (FieldBin) VALUES (UNHEX("110E8400E29B11D4A716446655440000"))

a dotazujte pomocí:

SELECT HEX(FieldBin) AS FieldBin FROM Table

Nyní ve svém programovacím jazyce znovu vložte pomlčky na pozice 9, 14, 19 a 24, aby odpovídaly vašemu původnímu UUID. Pokud se pozice vždy liší, můžete tyto informace uložit do druhého pole.

Celý příklad:

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`

Pokud chcete použít tuto techniku ​​s jakýmkoli hexadecimálním řetězcem, vždy proveďte length / 2 pro délku pole. Takže pro sha512 by pole bylo BINARY (64) protože kódování sha512 je dlouhé 128 znaků.



  1. Přidání 'serial' do existujícího sloupce v Postgresu

  2. Přidejte sloupec do tabulky v SQL

  3. Jak nahradit řetězec ve sloupci tabulky SQL Server

  4. Dotaz PostgreSQL pro vrácení výsledků jako seznam oddělený čárkami