IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PostgreSQL Discussion :

UUID dans toutes les tables ou non ?


Sujet :

PostgreSQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 716
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 716
    Par défaut UUID dans toutes les tables ou non ?
    Bonjour

    La generation d'un UUID dans toutes mes tables est elle un "dogme" de DBA ou si cela n'apporte rien car j'ai un id 'metier' unique alors il faut mieux s'en passer ?
    Merci de vos réponses

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 998
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 998
    Billets dans le blog
    6
    Par défaut
    Si c'est pour une clé primaire c'est stupide d'utiliser un UUID. C'est lourd, lent à générer et fragmente immédiatement la table => mauvaises perforrmance, mauvaise montée en charge. Mieux vaut utiliser les mécanismes d'auto incrémentation qui sont fait pour cela (IDENTITY et SEQUENCE : norme SQL).

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre Expert
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    956
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 956
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    C'est lourd, lent à générer et fragmente immédiatement la table
    Explication de texte : La fragmentation n'existe que si on l'utilise avec index ; d'autant plus s'il est cluster (M$SQL).
    Si c'est pour l'utilsier pour un ID, faudra accepter les conséquences ...

    L'utilisation d'un UUID est utile dans le cas des bases réparties en mode "multi-maitre".
    C'est une pierre angulaire de la réplication de fusion (M$SQL).

    En dehors de cas d'usage, je rejoint Frédéric :
    Citation Envoyé par SQLpro Voir le message
    Mieux vaut utiliser les mécanismes d'auto incrémentation qui sont fait pour cela (IDENTITY et SEQUENCE : norme SQL).

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 998
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 998
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par Michel.Priori Voir le message
    Explication de texte : La fragmentation n'existe que si on l'utilise avec index ;
    Pas du tout...

    la fragmentation existe dans n'importe quelle structure de données, table en heap ou index de quelque sorte (Btree ou autre) dès qu'il y a :
    • une suppression (delete)
    • un update


    Pour le cas d'un DELETE, la ligne est supprimée jusqu'à la prochaine reconstruction ou réemploi... donc fragmentation...

    De manière générale, le fait d'utiliser des types de données variables (VARCHAR, VARBINARY...) fait qu'en cas d'UPDATE agrandissant la valeur, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE PERSONNE
    SET NOM = 'DE LA POMMERY DU COUDRAY'
    WHERE NOM = 'LAVAL';
    ...le positionnement n'est plus possible à l'emplacement d'origine car dans 5 caractères on ne peut en mettre 24. Il y aura donc un déplacement de la ligne dans une table en heap ce qui générera un trou à l'emplacement d'origine. Une fragmentation apparait aussi pour un UPDATE inverse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE PERSONNE
    SET NOM = 'LAVAL'
    WHERE NOM = 'DE LA POMMERY DU COUDRAY';
    .. il en résultera 11 caractères inutilisés... S'ils s'agit de lettres d'alphabets non latin ou diacritique alors le trou est plus important en octets que des caractères simple en latin...

    Malheureusement pour le cas de PostGreSQL c'est pire car, dans tous les cas, il y un INSERT + DELETE dans le cas d'un UPDATE.

    Pour le cas de l'INSERT, c'est plus subtil.... Dans certains SGBDR haut de gamme (SQL Server par exemple) il y a recherche du premier "trou" suffisant pour y loger la ligne. Donc cela réduit la fragmentation. Dans des SGBDR bas de gamme comme MySQL/MariaDB ou PostGreSQL on ne s'emmerde pas... la ligne est rajoutée dans l'espace disponible en fin de page, souvent la dernière...

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  5. #5
    Membre Expert
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    956
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 956
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    la fragmentation existe dans n'importe quelle structure de données, table en heap ou index de quelque sorte (Btree ou autre)
    Ok fred, mais là on parle d'une colonne UUID...

    Une colonne UUDI se génère, sous Pg, en général, via gen_random_uuid().
    Vu qu'un index Btree est ordonné, l'ajout de valeurs aléatoires va "fragmenter" l'index.
    Et un ID est généralement indexé (voire être la PK)

    Pas besoin de faire un cours sur la fragmentation en général.

    Par contre, toi comme moi, n'avons produit les tests montrant nos convictions/explications.
    On est dans l'argument d'autorité.

    Citation Envoyé par SQLpro Voir le message
    Dans certains SGBDR haut de gamme (SQL Server par exemple) il y a recherche du premier "trou" suffisant pour y loger la ligne.
    oui, ok ; mais pourquoi ne pas citer Oracle ?

    Si on revient à la demande initiale qui demande si on peux "se passer" des UUID, ta réponse était la bonne => oui, utiliser identity ou sequence.

Discussions similaires

  1. Réponses: 4
    Dernier message: 08/04/2015, 09h29
  2. Connaitre le nbr d'enregistrement dans toutes les tables de la base
    Par lolafrite dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 30/10/2008, 16h32
  3. Rechercher une donnée dans toutes les tables d'une BDD
    Par TheYoMan dans le forum Paradox
    Réponses: 2
    Dernier message: 23/10/2008, 20h24
  4. Réponses: 6
    Dernier message: 25/03/2008, 10h39
  5. Comment MAJ le même champ présent dans toutes les tables ?
    Par PamelaGeek dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 02/02/2006, 14h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo