Diferencia entre búsqueda de índice agrupada y búsqueda de índice no agrupada

10

¿Cuál es la diferencia entre la búsqueda de índice agrupado (CI) y la búsqueda de índice no agrupado (NCI)? ¿Uno se desempeña mejor que el otro?

La razón por la que pregunto esto es porque tengo una tabla con 50 millones de filas y 150 columnas. Tiene una columna denominada IDdefinida como el índice agrupado. Hay un NCI más con la misma ID de clave de índice y includecolumnas de siete días. Me parece que el índice NC es un duplicado aquí y se puede descartar de forma segura.

Entonces, ¿quiero algunos puntos de vista / consejos de expertos si pueden descartarse de manera segura o si deben mantenerse intactos?

SQLPRODDBA
fuente
¿Está diciendo que TODAS las columnas están incluidas en el índice no agrupado?
Ian Ringrose
No. La tabla tiene 150 columnas con una columna de ID definida como CI y tiene un índice NCI con una columna de ID nuevamente como clave de índice y 7 columnas más en incluir.
SQLPRODDBA
Luego, Paul White parece haber dado la respuesta correcta, sin embargo, me pregunto si debe cambiar la tabla "base" de una tabla agrupada a un montón. O incluso dividir la tabla según la frecuencia con la que se actualizan las diferentes columnas, para reducir el costo del registro de transacciones.
Ian Ringrose

Respuestas:

26

Un índice no agrupado que tiene las mismas claves * que el índice agrupado, aún puede ser útil, porque el índice no agrupado generalmente será más pequeño y más denso. Recuerde, un índice agrupado incluye todos los datos en fila, por lo que normalmente es el índice más amplio (menos denso) posible.

* Las mismas columnas clave, en la misma secuencia, ordenadas de la misma manera (asc / desc).

Para una búsqueda singleton (una búsqueda que utiliza un predicado de igualdad en un índice único), la diferencia principal es la presunta mayor probabilidad de que las páginas de índice necesarias para encontrar ese registro único ya esté en la memoria. En igualdad de condiciones, un índice no agrupado con 100 páginas tiene una mejor oportunidad que un índice agrupado almacenado en 10,000 páginas.

Para cualquier otro tipo de búsqueda, excepto un singleton, también habrá un componente de escaneo. La parte de escaneo también se beneficiará de la mayor densidad del índice no agrupado (más filas por página). Incluso si las páginas deben venir del almacenamiento persistente, leer menos páginas es más rápido.

Debe verificar la documentación del sistema, preguntar a la persona que agregó el índice y / o buscar comentarios de código para comprender por qué existe este índice. También debe verificar cuidadosamente las definiciones completas del índice , incluida la compresión, y observar los scripts de mantenimiento del índice. Podría haber otras razones especiales para tener el índice no agrupado (por ejemplo, la capacidad de reconstruir en línea).

Paul White 9
fuente