Pregunta

Estoy bastante bien versado en performace servidor SQL pero constanly que argumentar por la idea de que los GUID deben utilizarse como el tipo predeterminado para Clusterd claves principales.

Si se asume que la tabla tiene una cantidad bastante baja de insertos por día (5.000 +/- filas / día), qué tipo de problemas performace podríamos ejecutar en? ¿Cómo van a divisiones de página afectar a nuestra búsqueda de la rentabilidad? ¿Con qué frecuencia debería indexar (o debería desfragmentar)? ¿Qué debería establecer los factores de relleno a (100, 90, 80, etc.)?

¿Qué pasa si insertaban 1.000.000 de filas por día?

Me disculpo beforhand para todas las preguntas, pero estoy buscando a conseguir un poco de copia de seguridad para no usar GUID como nuestro defecto para PK. Sin embargo, estoy totalmente abierto a tener mi mente cambió por el conocimiento overwehlming de la base de usuarios stackoverflow.

¿Fue útil?

Solución

Si usted está haciendo cualquier tipo de volumen, los GUID son extremadamente malo como PK mal a menos que utilice GUID secuenciales , por las razones exactas que usted describe. Página fragmentación es severa :

                 Average                    Average
                 Fragmentation  Fragment    Fragment   Page     Average 
Type             in Percent     Count       Size       Count    Space Used

id               4.35           7           16.43      115      99.89
newidguid        98.77          162         1          162      70.90 
newsequentualid  4.35           7           16.43      115      99.89

Y como esta comparación entre GUID y enteros muestra:

  

Test1 causado una enorme cantidad de divisiones de página, y tenía una densidad de escaneado alrededor 12% cuando me encontré con un DBCC SHOWCONTIG después de que los insertos se habían completado. La tabla Test2 tenía una densidad de exploración alrededor de 98%

Si su volumen es muy bajo, sin embargo, simplemente no importa mucho.

Si realmente necesita una identificación única a nivel mundial, pero tienen alto volumen (y no se puede utilizar identificaciones consecutivas), sólo hay que poner los GUID en una columna indexada.

Otros consejos

Los inconvenientes del uso de GUID como clave principal:

  • No hay pedido significativa, significa la indexación no da aumento de rendimiento como lo hace con un entero.
  • tamaño de un GUID de 16 bytes, frente a 2, 4 u 8 bytes para un entero.
  • muy difícil para los seres humanos a tener en cuenta, por lo que no es bueno como un identificador de referencia.

Ventajas:

  • Permita que no adivinar las claves primarias, por tanto, que pueden ser menos peligroso cuando se muestra en una cadena de consulta la página web o en la aplicación.
  • Útil en bases de datos que no proporcionan un tipo de datos incremento automático o identidad.
  • útil cuando se necesita para unir datos entre dos fuentes de datos dispares a través de plataformas o entornos.

pensé que la decisión en cuanto a si se debe utilizar GUID era bastante simple, pero tal vez soy consciente de otras cuestiones.

la mínima insertos tales por día, dudo que la división de la página debe ser un factor significativo. La verdadera pregunta es ¿cómo se compara 5000 con el número de filas existentes, ya que esto sería la principal información necesaria para decidir sobre un factor de llenado inicial apropiada a deffer divisiones.

Una vez dicho esto, yo personalmente no soy un gran fan de los GUID. Entiendo que pueden servir bien en algunos contextos, pero en muchos casos no son más que "en el camino" [de la eficiencia, de la facilidad de uso, de ...]

Encuentro las siguientes preguntas útil para reducir el GUID de decidir si se debe utilizar o no.

  • ¿El PK ser compartida / publicado? (Es decir Va a ser utilizado más allá de su uso interno dentro de SQL, se necesitan aplicaciones de estas teclas de una manera algo persistente? ¿Se usuarios de alguna manera ven estas llaves?
  • Podría ser utilizado para ayudar a la PK combinar diferentes fuentes de datos?
  • ¿La mesa tiene una -posiblemente con compuesto de primaria a partir de la columna (s) en los datos? ¿Cuál es el tamaño de este posible esta tecla
  • ¿Cómo se clasifican las claves primarias? Si compuesto, son las primeras columnas Selectivo?

El uso de un GUID (a menos que sea un GUID secuencial) como un índice agrupado se va a matar rendimiento de las inserciones. Puesto que el diseño de la mesa física está alineado de acuerdo con el índice agrupado, utilizando un GUID que tiene un orden de secuenciación aleatoria causará grave fragmentación tabla. Si desea utilizar un GUID como un índice PK / clúster debe ser un GUID secuenciales usando la función newsequentialid () en SQL Server. Esto garantizará que los GUID generados se ordenan secuencialmente y evitar la fragmentación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top