sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo almacenar uuid como número?

Si entiendo correctamente, ¿está usando UUID en su columna principal? La gente dirá que una clave primaria regular (entera) será más rápida, pero hay otra forma de usar el lado oscuro de MySQL. De hecho, MySQL es más rápido usando binario que cualquier otra cosa cuando se requieren índices.

Como el UUID es de 128 bits y está escrito en hexadecimal, es muy fácil acelerar y almacenar el UUID.

Primero, en su lenguaje de programación elimine los guiones

De 110E8400-E29B-11D4-A716-446655440000 a 110E8400E29B11D4A716446655440000 .

Ahora tiene 32 caracteres (como un hash MD5, con el que también funciona).

Desde un único BINARY en MySQL tiene un tamaño de 8 bits, BINARY(16) es el tamaño de un UUID (8*16 =128).

Puede insertar usando:

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

y consulta usando:

SELECT HEX(FieldBin) AS FieldBin FROM Table

Ahora, en su lenguaje de programación, vuelva a insertar los guiones en las posiciones 9, 14, 19 y 24 para que coincidan con su UUID original. Si las posiciones son siempre diferentes, podría almacenar esa información en un segundo campo.

Ejemplo completo:

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`

Si desea utilizar esta técnica con cualquier cadena hexadecimal, siempre haga length / 2 para la longitud del campo. Entonces, para un sha512, el campo sería BINARY (64) ya que una codificación sha512 tiene 128 caracteres.