Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 3914|Risposta: 3

[Fonte] [MSSQL] SQL SERVER GUID ordinati e GUID non ordinati come test principali di aggregazione delle chiavi

[Copiato link]
Pubblicato su 08/06/2023 21:12:26 | | | |
Requisiti: Quando si utilizzano i GUID come indici primari di aggregazione delle chiavi, si raccomanda di utilizzare GUID ordinati, poiché i GUID non ordinati causeranno spreco di spazio e la conseguente diminuzione dell'efficienza di lettura e scrittura.

Recensione:

Frammentazione degli indici ottimizzata per le prestazioni di SQL Server
https://www.itsvse.com/thread-9508-1-1.html

[Gira] (MSSQL) Int e guid database SQL Server per il confronto delle chiavi primarie
https://www.itsvse.com/thread-10605-1-1.html

Valore GUID del database

I tipi di dati a Identificatore Globalmente Univoco (GUID) in SQL Server sono rappresentati da tipi di datiIdentificatore unico, che memorizza un valore binario di 16 byte. Un GUID è un numero binario il cui scopo principale è fungere da identificatore che deve essere unico in una rete con molti computer su molti siti.

Sia il Guid che l'SqlGuid hanno modi per confrontare diversi valori GUID. L'implementazione di SqlGuid utilizza il comportamento di SQL Server,Gli ultimi sei byte del valore sono i più importanti

I GUID sequenziali sono intrinsecamente indovinabili, quindi non usarli in contesti sensibili alla sicurezza

Riferimento:Il login del link ipertestuale è visibile.

Il database è ordinato dal GUID

Il database SQL Server ne ha unaNewSequentialId()funzione per creare un GUID ordinato. Quando si crea una tabella, si può impostarla come valore predefinito di un campo di tipo GUID e creare automaticamente il valore della chiave primaria inserendo nuovi dati (questa funzione può essere usata solo come valore predefinito del campo, non chiamata direttamente in SQL).

Esempio:

La funzione NewSequentialId() può essere utilizzata solo nei database, anche se la documentazione MSDN di Microsoft afferma che NEWSEQUENTIALID è un wrapper per la funzione UuidCreateSequential di Windows.

Consiglio: Non usare la funzione se si tratta di una questione di riservatezza. PerchéÈ possibile indovinare il valore del prossimo GUID generatoper accedere ai dati associati a quel GUID.

Riferimento:Il login del link ipertestuale è visibile.
Il login del link ipertestuale è visibile.

.NET crea un GUID ordinato

La funzione UuidCreateSequential dipende dall'hardware di calcolo del metodoGli ultimi 12 bit sono in realtà l'indirizzo MAC della scheda di rete

Il codice è il seguente:

I risultati sono i seguenti:



Mancanza:

  • Questo metodo richiede DllImport per chiamare la libreria Windows, quindi non è multipiattaforma.
  • Non può essere utilizzato in un ambiente clusterizzato, dove più macchine scrivono nello stesso database perché i GUID risultanti saranno diversi tra loro (hardware informatico dipendente dalla funzione), causando frammentazione dell'indice.
  • Se il tuo server Windows si riavvia, il GUID può partire da un intervallo inferiore, causando frammentazione dell'indice.

Riferimento:

Il login del link ipertestuale è visibile.
Il login del link ipertestuale è visibile.

Se stai usando un programma .NET per creare una GUID ordinata da SQL SERVER, si consiglia di utilizzare una libreria di classi di terze parti:RT. Pettine, il comando nuget è il seguente:


Il codice è il seguente:

Prodotto:



Riferimento:Il login del link ipertestuale è visibile.

Frammenti di indice di chiave primaria GUID ordinati e non ordinati

Inizia creando due tabelle con il seguente script:

Il test inserisce 100.000 dati e il codice è il seguente:

I risultati dei test sono i seguenti:

GUIDTempo consumato (ms)Densità di scansione [Miglior conteggio: Conteggio reale], più alto è il valore, meglio èFrammentazione a scansione logica, più basso è il valore, meglio èDensità media di pagine (completa) (Media Densità di pagine (piena), più alto è il valore, meglio è
GUID non ordinato 1336712.58% [61:485]98.97%63.66%
Ordina GUID 14139100.00% [39:39]0.32%99.61%





Il test inserisce nuovamente 1 milione di dati in ordine, con un GUID fuori ordine che prende 135203 ms e un GUID ordinato che ne impiega 135134 ms. L'occupazione dello spazio di stoccaggio è la seguente:

GUID non ordinato: 36,547 MB
GUID ordinato: 26,609 MB



Riferimento:Il login del link ipertestuale è visibile.


(Fine)




Precedente:.NET Core programmi risorsa multilingue di lettura e scrittura (.resx)
Prossimo:Ottimizzazione della memoria dei file disco per la lettura in flusso .NET/C#
 Padrone di casa| Pubblicato su 27/01/2024 11:07:12 |
ABP crea un GUID ordinato per il database SQL Server, il codice sorgente è il seguente:



 Padrone di casa| Pubblicato su 24/03/2024 11:43:45 |
 Padrone di casa| Pubblicato su 11/04/2024 15:00:11 |
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com