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:
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:
| GUID | Tiempo consumido (MS) | Densidad de escaneo [Mejor recuento: Recuento real], cuanto mayor sea el valor, mejor | Fragmentación por escaneo lógico, cuanto menor sea el valor, mejor | Densidad media de páginas (completa) (Prog. Densidad de página (completa), cuanto mayor sea el valor, mejor | | GUID no ordenado | 13367 | 12.58% [61:485] | 98.97% | 63.66% | | Orden GUID | 14139 | 100.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)
|