¿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 ID
definida como el índice agrupado. Hay un NCI más con la misma ID de clave de índice y include
columnas 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?
sql-server
sql-server-2012
index-tuning
SQLPRODDBA
fuente
fuente
Respuestas:
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).
fuente