Considere a seguinte consulta:
select distinct pnumber
from project
where pnumber in
(select pnumber
from project, department d, employee e
where e.dno=d.dnumber
and
d.mgr_snn=ssn
and
e.lname='employee1' and project.pnumber = 2 )
or
pnumber in
(select pno
from works_on, employee
where essn=ssn and lname='employee1' );
Eu queria testar usando índices de brin, então eliminei as restrições de chave primária em todas as minhas tabelas e adicionei os seguintes índices:
CREATE INDEX idx_brin_pnumber ON project USING brin(pnumber);
CREATE INDEX idx_brin_ssn ON project USING brin(ssn);
CREATE INDEX idx_brin_dnumber ON project USING brin(dnumber);
CREATE INDEX idx_brin_essn ON project USING brin(essn);
e anexarei o plano de consulta de saída abaixo
Eu costumava pensar que o motivo era devido ao seqScans necessário durante a junção, mas quando executo a mesma consulta sem nenhum indício e habilito o seqscan, ele faz isso com um custo muito menor. Então, qual é a razão para isso?