Asegúrate de que los índices son los que necesitas.
Esto es en base al SQL que ejecutas, aunque creo que quizás falten más cosas.
- No utilizas TIPODOC en el WHERE
- TIPODOC debería estar también en el detalle si es parte de la PK de FACTURAS
Código SQL
[-]
CREATE TABLE FACTURAS (
NUMERO INTEGER NOT NULL,
RUT VARCHAR(15) NOT NULL,
TIPODOC VARCHAR(15),
ESTADO INTEGER,
FECHAEMI DATE,
FECPAGO DATE,
TOTAL DOUBLE PRECISION,
PAGADO SMALLINT,
SALDO DOUBLE PRECISION
);
ALTER TABLE FACTURAS ADD CONSTRAINT PK_FACTURAS PRIMARY KEY (NUMERO, RUT);
CREATE INDEX FACTURAS_IDX1 ON FACTURAS (ESTADO);
CREATE TABLE DETFACT (
NUMERO INTEGER NOT NULL,
RUT VARCHAR(15) NOT NULL,
LINEA INTEGER NOT NULL,
CODIGO VARCHAR(15),
DESCRIP VARCHAR(60),
CANTIDAD INTEGER
);
ALTER TABLE DETFACT ADD CONSTRAINT PK_DETFACT PRIMARY KEY (NUMERO, RUT, LINEA);
ALTER TABLE DETFACT ADD CONSTRAINT FK_DETFACT_1 FOREIGN KEY (NUMERO, RUT) REFERENCES FACTURAS (NUMERO, RUT);
CREATE TABLE CLIENTES (
CODIGO VARCHAR(15) NOT NULL,
NOMBRE VARCHAR(60)
);
ALTER TABLE CLIENTES ADD CONSTRAINT PK_CLIENTES PRIMARY KEY (CODIGO);
Código SQL
[-]
SELECT FACTURAS.TIPODOC, FACTURAS.RUT, FACTURAS.NUMERO, FACTURAS.ESTADO, FACTURAS.FECHAEMI, FACTURAS.FECPAGO,
FACTURAS.TOTAL, FACTURAS.PAGADO, FACTURAS.SALDO, DETFACT.CODIGO, DETFACT.DESCRIP, DETFACT.CANTIDAD,
CLIENTES.NOMBRE
FROM FACTURAS
LEFT JOIN CLIENTES ON CLIENTES.CODIGO = FACTURAS.RUT
LEFT JOIN DETFACT ON DETFACT.RUT = FACTURAS.RUT AND DETFACT.NUMERO = FACTURAS.NUMERO
WHERE
FACTURAS.ESTADO <> :ESTADO
ORDER BY FACTURAS.FECHAEMI
Si presentas la estructura completa de estas tres tablas quizás podamos ayudarte un poco más.