En las bases de datos , un índice parcial , también conocido como índice filtrado, es un índice al que se le aplica alguna condición para que incluya un subconjunto de filas en la tabla .
Esto permite que el índice siga siendo pequeño, aunque la tabla sea bastante grande y tenga una selectividad extrema.
Suponga que tiene una tabla de transacciones donde las entradas comienzan con STATUS = 'A' (activo), y luego pueden pasar por otros estados ('P' para pendiente, 'W' para "en proceso") antes de alcanzar un estado final, 'F', momento en el que ya no es probable que vuelva a procesarse.
En PostgreSQL, un índice parcial útil podría definirse como:
crear índice partial_status en txn_table ( estado ) , donde el estado en ( 'A' , 'P' , 'W' );
Este índice no se molestaría en almacenar ninguno de los millones de filas que han alcanzado el estado "final", 'F', y permitiría que las consultas que buscan transacciones que aún "necesitan trabajo" busquen de manera eficiente a través de este índice.
De manera similar, se puede usar un índice parcial para indexar solo aquellas filas donde una columna no es nula, lo que será beneficioso cuando la columna generalmente sea nula.
crear índice partial_object_update en object_table ( updated_on ) donde updated_on es no nulo ;
Este índice permitiría que la siguiente consulta lea solo las tuplas actualizadas:
seleccione * de object_table donde updated_on no es nulo order by updated_on ;
No es necesario que la condición sea la misma que el criterio del índice; El artículo de Stonebraker a continuación presenta una serie de ejemplos con índices similares a los siguientes:
crear índice salario_parcial en empleado ( edad ) donde salario > 2100 ;
Apoyo
En SQL Server , este tipo de índice se denomina índice filtrado . [1] índices parciales han sido apoyados en PostgreSQL desde la versión 7.2, publicado en febrero de 2002. [2] SQLite apoya índices parciales desde la versión 3.8.0. [3]
MongoDB admite índices parciales en su última versión V3.2. [4]
MySQL a partir de la versión 8.0 no admite índices parciales. En MySQL, el término "índice parcial" se usa a veces para referirse a índices de prefijo, donde solo se almacena en el índice un prefijo truncado de cada valor. Esta es otra técnica para reducir el tamaño del índice. [5]
Referencias
- ^ Documentación de SQL Server 2008: Directrices de diseño de índices filtrados . Microsoft TechNet .
- ^ "Documentación de PostgreSQL: Notas de la versión: Versión 7.2" . PostgreSQL . Consultado el 9 de octubre de 2009 .
Habilitar índices parciales (Martijn van Oosterhout)
- ^ "Índices parciales" . Consultado el 4 de febrero de 2014 .
- ^ Notas de la versión de MongoDB V302 .
- ^ Ronald Bradford (22 de julio de 2009). "Comprensión de las diferentes implementaciones del índice MySQL" .