sql >> Base de Datos >  >> RDS >> Sqlserver

Agrupado vs No Agrupado

La distinción entre un índice agrupado y no agrupado es que el índice agrupado determina el orden físico de las filas en la base de datos . En otras palabras, aplicar el índice agrupado a PersonId significa que las filas se ordenarán físicamente por PersonId en la tabla, lo que permite que una búsqueda de índice en esto vaya directamente a la fila (en lugar de un índice no agrupado, que lo dirigiría a la ubicación de la fila, agregando un paso adicional).

Dicho esto, es inusual para que la clave principal no sea el índice agrupado, pero no inaudito. El problema con su escenario es en realidad lo contrario de lo que está asumiendo:quiere único valores en un índice agrupado, no duplicados. Debido a que el índice agrupado determina el orden físico de la fila, si el índice está en una columna no única, el servidor debe agregar un valor de fondo a las filas que tienen un valor de clave duplicado (en su caso, cualquier fila con el mismo PersonId ) para que el valor combinado (clave + valor de fondo) sea único.

Lo único que sugeriría es no utilizando una clave sustituta (su CourtOrderId ) como clave principal, pero en su lugar use una clave principal compuesta de PersonId y alguna otra columna o conjunto de columnas de identificación única. Sin embargo, si eso no es posible (o no es práctico), coloque el índice agrupado en CourtOrderId .