Exigences : Lors de l’utilisation des GUID comme index primaires d’agrégation de clés, il est recommandé d’utiliser des GUID ordonnés, car les GUID non ordonnés entraînent un gaspillage d’espace et une diminution de l’efficacité de lecture et d’écriture qui en résulte.
Révision:
Valeur GUID de la base de données
Les types de données à identifiant unique global (GUID) dans SQL Server sont représentés par des types de donnéesIdentifiant unique, qui stocke une valeur binaire de 16 octets. Un GUID est un nombre binaire dont la fonction principale est d’être un identifiant qui doit être unique dans un réseau avec de nombreux ordinateurs sur plusieurs sites.
Guid et SqlGuid ont tous deux des moyens de comparer différentes valeurs GUID. L’implémentation de SqlGuid utilise le comportement de SQL Server,Les six derniers octets de la valeur sont les plus importants。
Les GUID séquentiels sont intrinsèquement devinésibles, donc ne les utilisez pas dans des contextes sensibles à la sécurité。
Référence:La connexion hyperlientérée est visible.
La base de données est ordonnée par le GUID
La base de données SQL Server en possède unNewSequentialId()fonction pour créer un GUID ordonné. Lors de la création d’une table, vous pouvez la définir comme valeur par défaut d’un champ de type GUID, et créer automatiquement la valeur de la clé primaire lors de l’insertion de nouvelles données (cette fonction ne peut être utilisée que comme valeur par défaut du champ, pas directement appelée en SQL).
Exemple:
La fonction NewSequentialId() ne peut être utilisée que dans les bases de données, bien que la documentation MSDN de Microsoft indique que NEWSEQUENTIALID est un enveloppe pour la fonction Windows UuidCreateSequential.
Conseil : N’utilisez pas cette fonction si c’est un problème de confidentialité. Parce queIl est possible de deviner la valeur du prochain GUID générépour accéder aux données associées à ce GUID.
Référence:La connexion hyperlientérée est visible.
La connexion hyperlientérée est visible.
.NET crée un GUID ordonné
La fonction UuidCreateSequential dépend du matériel de calcul de la méthodeLes 12 derniers bits correspondent en fait à l’adresse MAC de la carte réseau。
Le code est le suivant :
Les résultats sont les suivants :
Défaut:
- Cette méthode nécessite DllImport pour appeler la bibliothèque Windows, donc elle n’est pas multiplateforme.
- Il ne peut pas être utilisé dans un environnement en cluster, où plusieurs machines écrivent dans la même base de données car les GUID résultants seront différents les uns des autres (matériel informatique dépendant des fonctions), entraînant une fragmentation de l’indice.
- Si votre serveur Windows redémarre, le GUID peut démarrer à une plage inférieure, entraînant une fragmentation de l’index.
Référence:
La connexion hyperlientérée est visible.
La connexion hyperlientérée est visible.
Si vous utilisez un programme .NET pour créer un GUID commandé par SQL SERVER, il est recommandé d’utiliser une bibliothèque de classes tierce :RT. Peigne, la commande nuget est la suivante :
Le code est le suivant :
Sortie:
Référence:La connexion hyperlientérée est visible.
Fragments d’index de clé primaire GUID ordonnés et non ordonnés
Commencez par créer deux tables avec le script suivant :
Le test insère 100 000 données, et le code est le suivant :
Les résultats des tests sont les suivants :
| GUID | Temps consommé (ms) | Densité de balayage [Meilleur comptage : Compte réel], plus la valeur est élevée, mieux c’est | Fragmentation par balayage logique, plus la valeur est basse, mieux c’est | Densité moyenne de pages (complète) (Moyenne Densité de pages (complète), plus la valeur est élevée, mieux c’est | | GUID non ordonné | 13367 | 12.58% [61:485] | 98.97% | 63.66% | | Ordre GUID | 14139 | 100.00% [39:39] | 0.32% | 99.61% |
Le test insère à nouveau 1 million de données, avec un GUID hors ordre prenant 135203 ms et un GUID ordonné prenant 135134 ms. L’occupation de l’espace de stockage est la suivante :
GUID non ordonné : 36,547 Mo GUID commandé : 26,609 Mo
Référence:La connexion hyperlientérée est visible.
(Fin)
|