Quelles sont les différentes options et leurs compromis pour stocker un UUID dans une table de MYSQL?

StackOverflow https://stackoverflow.com/questions/1363425

  •  20-09-2019
  •  | 
  •  

Question

Je prévois sur l'utilisation du client fourni des UUID comme la clé primaire dans plusieurs tables dans une base de données MySQL.

Je suis venu à travers divers mécanismes pour le stockage UUID dans une base de données MySQL, mais rien qui les compare les uns contre les autres. Ceux-ci comprennent le stockage comme:

  • BINARY (16)
  • CHAR (16)
  • CHAR (36)
  • VARCHAR (36)
  • 2 x BIGINT

Y at-il de meilleures options, comment les options se comparent les uns contre les autres en termes de:

  • taille de stockage?
  • les frais généraux de recherche? (Questions d'index, etc joint.)
  • facilité d'insertion et de mise à jour des valeurs du code client? (Généralement Java via JPA)

Y a-t-il des différences en fonction de la version de MySQL votre course, ou le moteur de stockage? Nous sommes en cours d'exécution 5.1 et prévoyez d'utiliser InnoDB. Je salue tous les commentaires fondés sur l'expérience pratique d'essayer d'utiliser UUID. Merci.

Était-ce utile?

La solution

Je l'ai utilisé pour UUID client intelligent de stockage en ligne / hors ligne et la synchronisation des données et des bases de données que je connaissais devraient être fusionnés à un moment donné. J'ai toujours utilisé char (36) ou char (32) (sans tiret). Vous obtenez un léger gain de performance sur varchar et presque tout le soutien de bases de données car. Je ne l'ai jamais essayé binaire ou bigint. Une chose à prendre en compte, est que pad volonté char avec des espaces si vous n'utilisez pas 36 ou 32 caractères. Point d'être, ne pas écrire un test unitaire qui définit l'ID d'un objet à « test » et puis essayer de le trouver dans la base de données. ;)

Autres conseils

J'irais avec le stocker dans une colonne binaire (16), si vous êtes en effet fixé sur l'utilisation UUID du tout. quelque chose comme 2x bigint serait assez lourd à gérer. De plus, je l'ai entendu parler de gens les parce que le recul début des UUID sur la même machine ont tendance à être le même au début, et les différentes parties sont à la fin, donc si vous les inverser, vos index sera plus efficace .

Bien sûr, mon instinct me dit que vous devriez utiliser des entiers d'incrément d'auto, sauf si vous avez une très bonne raison d'utiliser l'UUID. Une bonne raison génère différentes bases de données de clés uniques. L'autre option est que vous envisagez d'avoir plus d'enregistrements qu'un magasin peut INT. Bien que de nombreuses applications ont vraiment besoin des choses comme ça. Il n'y a pas seulement beaucoup de perte d'efficacité lorsqu'ils ne sont pas en utilisant des nombres entiers pour vos clés, et il est aussi plus difficile de travailler avec eux. ils sont trop longs pour taper, et de les transmettre autour de vos URL font les URL très long. Alors, allez avec le UUID si vous en avez besoin, mais essayez de rester à l'écart.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top