Estamos usando o PostgreSQL v8.2.3.
Existem tabelas envolvidas: EMPREGADO e EMAILISTA .
Table 1: EMPLOYEE (column1, column2, email1, email2, column5, column6)
Table 2: EMAILLIST (email)
2 tabelas são unidas de forma que, se EMPLOYEE.EMAIL1 ou EMPLOYEE.EMAIL2 não tiverem uma entrada correspondente, essas linhas serão retornadas.
SELECT employee.email1, employee.email2,
e1.email IS NOT NULL AS email1_matched, e2.email IS NOT NULL AS email2_matched
FROM employee
LEFT JOIN emaillist e1 ON e1.email = employee.email1
LEFT JOIN emaillist e2 ON e2.email = employee.email2
WHERE e1.email IS NULL OR e2.email IS NULL
A coluna EMAIL
que é varchar (256) da EMAILLIST
tabela é indexada. Agora, o tempo de resposta é de 14 segundos.
Estatísticas da contagem de tabelas: Atualmente, o EMPREGADO possui 165.018 registros e o EMAILLIST possui 1.810.228 registros, e espera-se que as duas tabelas cresçam no futuro.
- É uma boa ideia / abordagem indexar uma coluna VARCHAR? Esta pergunta imediatamente me ocorreu pela razão de não termos indexado uma coluna VARCHAR antes em nosso aplicativo. Especialistas aconselhamento / sugestão sobre isso são muito apreciados.
- Com essa consulta e índice atuais, o tempo de resposta de 14 segundos é razoável ou existe algum escopo para ajustes adicionais? Quais são as experiências / opiniões em tempo real de outros usuários com base nesse tipo de tamanho de tabela e tempo de resposta?
NOTA: Meu requisito real / caso de uso é explicado em detalhes aqui .