me gusta de revisar lo que la Reina de la indización, Kimberly Tripp, tiene que decir sobre el tema:
voy a comenzar con mi recomendación para la clave de agrupación - por un par de razones. En primer lugar, es una decisión fácil de tomar y, en segundo lugar, tomar esta decisión a tiempo ayuda a prevenir de forma proactiva algunos tipos de fragmentación. Si puede evitar ciertos tipos de fragmentación de la tabla base, entonces puede minimizar algunas actividades de mantenimiento (algunas de las cuales, en SQL Server 2000 Y menos de las cuales, en SQL Server 2005) requieren que su tabla esté fuera de línea. OK, voy a llegar a las cosas de la reconstrucción posterior .....
Vamos a empezar con las cosas importantes que busco en una clave de agrupación:
* Unique
* Narrow
* Static
Por qué es único? Una clave de clúster debe ser única porque una clave de clúster (cuando existe) se utiliza como la clave de búsqueda de todos los índices no agrupados. Tomemos, por ejemplo, un índice en la parte posterior de un libro; si necesita encontrar los datos a los que apunta una entrada de índice, esa entrada (la entrada de índice) debe ser única; de lo contrario, qué entrada de índice sería la que está buscando. ? Entonces, cuando crea el índice agrupado, debe ser único. Pero, SQL Server no requiere que su clave de clúster se cree en una columna única. Puede crearlo en cualquier columna que desee. Internamente, si la clave de clúster no es única, SQL Server la "uniquificará" al agregar un entero de 4 bytes a los datos. Entonces, si el índice agrupado se crea en algo que no es único, no solo hay una sobrecarga adicional en la creación del índice, hay espacio en el disco desperdiciado, costos adicionales en INSERTES y ACTUALIZACIONES, y en SQL Server 2000, hay un costo adicional en un índice clustereD reconstruir (lo cual es más probable debido a la mala elección de la clave de agrupamiento).
Fuente:Ever-increasing clustering key debate - again!
1 causa todo lo que dice es correcto, pero sólo quería añadir: CI no único son bastante comunes cuando escaneo de rangos en particular, la columna (no único) es el acceso frecuente patrón. –
@Remus Rusanu: * * * * estaba pensando en agregar un descargo a mi declaración de escenario como * pero eso no significa nada *. Gracias por señalar un escenario donde podría ser útil. –
@Remus: ¿te refieres a la situación de nicho en la que tienes una columna no exclusiva como 'Departmentid' donde consultas algo como 'DepartmentId BETWEEN 1 and 100'? * editar * ah veo lo que quieres decir, sí, una columna de fecha en una tabla de registro también es un buen ejemplo. – thomaspaulb