Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 3914|Respuesta: 3

[Fuente] [MSSQL] GUIDs ordenados y GUIDs no ordenados de SQL SERVER como pruebas principales de agregación de claves

[Copiar enlace]
Publicado en 8/6/2023 21:12:26 | | | |
Requisitos: Al utilizar GUIDs como índices principales de agregación de claves, se recomienda utilizar GUIDs ordenados, ya que los GUIDs no ordenados provocarán un desperdicio de espacio y la consiguiente disminución en la eficiencia de lectura y escritura.

Revisión:

Fragmentación de índices optimizada para el rendimiento de SQL Server
https://www.itsvse.com/thread-9508-1-1.html

[Girar] (MSSQL) Int y guid de la base de datos SQL Server para comparación de claves primarias
https://www.itsvse.com/thread-10605-1-1.html

Valor GUID de base de datos

Los tipos de datos con Identificador Globalmente Único (GUID) en SQL Server se representan mediante tipos de datosIdentificador único, que almacena un valor binario de 16 bytes. Un GUID es un número binario cuya función principal es servir como identificador que debe ser único en una red con muchos ordenadores en muchos sitios.

Tanto Guid como SqlGuid tienen formas de comparar diferentes valores de GUID. La implementación de SqlGuid utiliza el comportamiento de SQL Server,Los últimos seis bytes del valor son los más importantes

Los GUIDs secuenciales son inherentemente adivinables, así que no los uses en contextos sensibles a la seguridad

Referencia:El inicio de sesión del hipervínculo es visible.

La base de datos está ordenada por el GUID

La base de datos SQL Server tiene unoNewSequentialId()función para crear un GUID ordenado. Al crear una tabla, puedes configurarla como el valor predeterminado de un campo tipo GUID y crear automáticamente el valor de la clave primaria al insertar nuevos datos (esta función solo puede usarse como valor predeterminado del campo, no llamada directamente en SQL).

Ejemplo:

La función NewSequentialId() solo puede usarse en bases de datos, aunque la documentación MSDN de Microsoft indica que NEWSEQUENTIALID es un envoltorio para la función UuidCreateSequential de Windows.

Consejo: No utilices la función si es un problema de confidencialidad. PorqueEs posible adivinar el valor del siguiente GUID generadopara acceder a los datos asociados a ese GUID.

Referencia:El inicio de sesión del hipervínculo es visible.
El inicio de sesión del hipervínculo es visible.

.NET crea un GUID ordenado

La función UuidCreateSequential depende del hardware de cómputo del métodoLos últimos 12 bits son en realidad la dirección MAC de la tarjeta de red

El código es el siguiente:

Los resultados son los siguientes:



Defecto:

  • Este método requiere DllImport para llamar a la biblioteca de Windows, por lo que no es multiplataforma.
  • No puede usarse en un entorno agrupado, donde varias máquinas escriben en la misma base de datos porque los GUID resultantes serán diferentes entre sí (hardware informático dependiente de la función), lo que resultará en fragmentación del índice.
  • Si tu servidor Windows se reinicia, el GUID puede comenzar en un rango inferior, lo que provoca fragmentación del índice.

Referencia:

El inicio de sesión del hipervínculo es visible.
El inicio de sesión del hipervínculo es visible.

Si usas un programa .NET para crear un GUID ordenado por SQL SERVER, se recomienda utilizar una biblioteca de clases de terceros:RT. Peine, el comando nuget es el siguiente:


El código es el siguiente:

Salida:



Referencia:El inicio de sesión del hipervínculo es visible.

Fragmentos ordenados y no ordenados del índice de clave primaria del GUID

Empieza creando dos tablas con el siguiente guion:

La prueba inserta 100.000 piezas de datos, y el código es el siguiente:

Los resultados de las pruebas son los siguientes:

GUIDTiempo consumido (MS)Densidad de escaneo [Mejor recuento: Recuento real], cuanto mayor sea el valor, mejorFragmentación por escaneo lógico, cuanto menor sea el valor, mejorDensidad media de páginas (completa) (Prog. Densidad de página (completa), cuanto mayor sea el valor, mejor
GUID no ordenado 1336712.58% [61:485]98.97%63.66%
Orden GUID 14139100.00% [39:39]0.32%99.61%





La prueba inserta de nuevo 1 millón de datos, con un GUID fuera de orden que toma 135203 ms y un GUID ordenado que toma 135134 ms. La ocupación del espacio de almacenamiento es la siguiente:

GUID no ordenado: 36,547 MB
GUID pedido: 26,609 MB



Referencia:El inicio de sesión del hipervínculo es visible.


(Fin)




Anterior:.NET Core programa archivos multilingües de lectura y escritura de recursos (.resx)
Próximo:Optimización de memoria de archivos de disco con lectura de flujo .NET/C#
 Propietario| Publicado en 27/1/2024 11:07:12 |
ABP crea un GUID ordenado para la base de datos SQL Server, cuyo código fuente es el siguiente:



 Propietario| Publicado en 24/3/2024 11:43:45 |
 Propietario| Publicado en 11/4/2024 15:00:11 |
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com