Stiamo usando PostgreSQL v8.2.3.
Vi sono tabelle coinvolte: DIPENDENTE ed EMAILLIST .
Table 1: EMPLOYEE (column1, column2, email1, email2, column5, column6)
Table 2: EMAILLIST (email)
2 tabelle vengono unite in modo tale che se EMPLOYEE.EMAIL1 o EMPLOYEE.EMAIL2 non hanno una voce corrispondente, tali righe verranno restituite.
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
La colonna EMAIL
che è varchar (256) della EMAILLIST
tabella è indicizzata. Ora, il tempo di risposta è di 14 secondi.
Statistiche sul conteggio delle tabelle: attualmente EMPLOYEE ha ottenuto 165.018 record e EMAILLIST ha ottenuto 1.810.228 record ed entrambe le tabelle dovrebbero crescere in futuro.
- È una buona idea / approccio indicizzare una colonna VARCHAR? Questa domanda mi viene immediatamente in mente a causa del motivo per cui non abbiamo indicizzato una colonna VARCHAR prima nella nostra applicazione. I consigli / suggerimenti degli esperti su questo argomento sono molto apprezzati.
- Con questa query e indice attuali, il tempo di risposta di 14 secondi è ragionevole o esiste un margine per l'ulteriore ottimizzazione? Quali sono le esperienze / opinioni in tempo reale di altri utenti basate su questo tipo di dimensioni della tabella e tempi di risposta?
NOTA: il mio requisito / caso reale è spiegato in dettaglio qui .