Particiona la tabla en el indicador activo, de modo que los registros activos estén en una partición y los registros inactivos estén en la otra partición. Luego, crea una vista activa para cada tabla que automáticamente tiene el filtro activo. El motor de consulta de la base de datos restringe automáticamente la consulta a la partición que tiene los registros activos, lo que es mucho más rápido que usar un índice en ese indicador.
Aquí hay un ejemplo de cómo crear una tabla particionada en Oracle. Oracle no tiene tipos de columnas booleanas, por lo que modifiqué la estructura de su tabla para propósitos de Oracle.
CREATE TABLE people
(
id NUMBER(10),
name VARCHAR2(100),
active NUMBER(1)
)
PARTITION BY LIST(active)
(
PARTITION active_records VALUES (0)
PARTITION inactive_records VALUES (1)
);
Si quisiera, podría poner cada partición en diferentes espacios de tablas. También puede particionar sus índices.
Por cierto, esto parece una repetición de esto pregunta, como novato, necesito preguntar, ¿cuál es el procedimiento para tratar con duplicados no deseados?
Editar: Como se solicitó en los comentarios, proporcionó un ejemplo para crear una tabla particionada en Oracle