Comment remplacer tous les GUID non séquentiels par des identificateurs séquentiels?
-
06-07-2019 - |
Question
J'ai une base de données SQL Server 2005 avec des champs vierges qui utilise des GUID standard non triés comme la plupart des valeurs de clés primaires et également dans les index en cluster (ce qui nuit aux performances).
Comment devrais-je changer ces identificateurs en GUID séquentiels? L'un des défis serait de remplacer toutes les valeurs de clé étrangère au fur et à mesure que je change de clé primaire.
Connaissez-vous des outils ou des scripts pour effectuer ce type de conversion?
La solution
rappelez-vous que vous ne pouvez utiliser que la fonction newsequentialid () par défaut
donc créez une nouvelle table avec 2 colonnes. Insérez la clé de votre table originale dans celle-ci (laissez l’autre colonne remplacée, elle se remplira d'elle-même)
rejoindre la table d'origine et mettre à jour la PK avec le newsequantialidid, si vous avez une mise à jour en cascade, les FK doivent se mettre à jour par eux-mêmes
Autres conseils
Comment savez-vous que c'est mauvais pour la performance?
L'avantage des GUID est que vous n'avez pas à vous soucier de plusieurs processus créant des enregistrements en même temps. Cela peut considérablement simplifier votre code, selon le programme.
Les SequentialGuids sont les meilleurs pour la performance lorsque Guid est la PK. C’est la raison de leur existence.