Tengo el privilegio de administrar una gran tabla OLAP particionada. Mientras revisaba esta tabla, noté que uno de los índices no está alineado con el esquema de partición. Como el autor no está disponible y las búsquedas de Google cuidadosamente elaboradas no han arrojado ningún resultado útil, no estoy seguro de si fue intencional o accidental.
¿Hay alguna razón para no particionar para alinear un índice en SQL Server 2008?
Respuestas:
La principal ventaja de no particionar un índice (no única) en un objeto de base con particiones es que funciona alrededor de una limitación optimizador de consultas de larga data relacionada con las solicitudes de datos ordenados, tales como
MIN
,MAX
, oTOP (n)
consultas.En un índice particionado, el optimizador generalmente no puede traducir
MIN
,MAX
oTOP (n)
a la misma operación por partición , seguido de un agregado global final sobre los agregados parciales por partición. En cambio, el optimizador elige un plan de ejecución que escanea todas las particiones del índice. La excepción a esto es el caso único donde la operación agregada o superior se especifica sobre la columna de partición.Debo mencionar que también hay muy buenas razones para no tener índices no alineados. Elegir usar un índice no alineado tendría que ser una elección muy informada. Lo hice yo mismo (rara vez) en el pasado, pero en circunstancias muy específicas donde los beneficios claramente superaban los costos, o no había otra alternativa razonable.
Artículo de Itzik Ben-Gan explicando el problema.
fuente
Existe el problema obvio en torno a algunas restricciones (por ejemplo, únicas) que requieren un índice no alineado.
Aparte de eso, los índices no alineados tienen un gran costo (principalmente evitan que muchos operadores paralelos vayan por subprocesos por partición y las alternativas son caras en memoria) y, por lo tanto, desaconsejaría encarecidamente dichos índices. Incluso con los casos enumerados por Paul, aún desaconsejaría los índices no alineados.
fuente
Los índices no alineados niegan el beneficio principal de la partición, que es el cambio de particiones. Si no depende de eso y está particionando por otras razones (almacenamiento diferente, particiones de solo lectura, estadísticas incrementales, ...), continúe y cree indexex no alineado.
Los índices no alineados son útiles porque puede imponer restricciones únicas en toda la tabla con ellos. Además, los índices no alineados no requieren que la clave de partición sea un prefijo de búsqueda implícito. Imagine tener 10000 particiones y consultas no basadas en la clave de partición. El plan de ejecución tendrá que buscar en 10000 particiones si el índice se alineó. Las otras respuestas tienen más ejemplos.
fuente