Cet article est un article miroir de traduction automatique, veuillez cliquer ici pour accéder à l’article original.

Vue: 3914|Répondre: 3

[Source] [MSSQL] Les GUID ordonnés et non ordonnés de SQL SERVER comme tests principaux d’indice d’agrégation de clés

[Copié le lien]
Publié sur 08/06/2023 21:12:26 | | | |
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:

Fragmentation d’index optimisée en performance de SQL Server
https://www.itsvse.com/thread-9508-1-1.html

[Tourner] (MSSQL) Base de données SQL Server int et guid pour la comparaison des clés primaires
https://www.itsvse.com/thread-10605-1-1.html

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 :

GUIDTemps consommé (ms)Densité de balayage [Meilleur comptage : Compte réel], plus la valeur est élevée, mieux c’estFragmentation par balayage logique, plus la valeur est basse, mieux c’estDensité moyenne de pages (complète) (Moyenne Densité de pages (complète), plus la valeur est élevée, mieux c’est
GUID non ordonné 1336712.58% [61:485]98.97%63.66%
Ordre GUID 14139100.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)




Précédent:Fichiers ressources multilingues (.resx) du programme .NET Core
Prochain:Optimisation de la mémoire des fichiers disque en lecture de flux .NET/C#
 Propriétaire| Publié sur 27/01/2024 11:07:12 |
ABP crée un GUID ordonné pour la base de données SQL Server, dont le code source est le suivant :



 Propriétaire| Publié sur 24/03/2024 11:43:45 |
 Propriétaire| Publié sur 11/04/2024 15:00:11 |
Démenti:
Tous les logiciels, supports de programmation ou articles publiés par Code Farmer Network sont uniquement destinés à l’apprentissage et à la recherche ; Le contenu ci-dessus ne doit pas être utilisé à des fins commerciales ou illégales, sinon les utilisateurs assumeront toutes les conséquences. Les informations sur ce site proviennent d’Internet, et les litiges de droits d’auteur n’ont rien à voir avec ce site. Vous devez supprimer complètement le contenu ci-dessus de votre ordinateur dans les 24 heures suivant le téléchargement. Si vous aimez le programme, merci de soutenir un logiciel authentique, d’acheter l’immatriculation et d’obtenir de meilleurs services authentiques. En cas d’infraction, veuillez nous contacter par e-mail.

Mail To:help@itsvse.com