Wir verwenden PostgreSQL v8.2.3.
Es handelt sich um Tabellen: EMPLOYEE und EMAILLIST .
Table 1: EMPLOYEE (column1, column2, email1, email2, column5, column6)
Table 2: EMAILLIST (email)
2 Tabellen werden so verknüpft, dass diese Zeilen zurückgegeben werden, wenn entweder EMPLOYEE.EMAIL1 oder EMPLOYEE.EMAIL2 keinen übereinstimmenden Eintrag haben.
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
Spalte , EMAIL
die ist varchar (256) die EMAILLIST
Tabelle ist indiziert. Die Reaktionszeit beträgt jetzt 14 Sekunden.
Statistik der Tabellenzahl: Derzeit hat EMPLOYEE 165.018 Datensätze und EMAILLIST 1.810.228 Datensätze, und beide Tabellen werden voraussichtlich in Zukunft wachsen.
- Ist es eine gute Idee, eine VARCHAR-Spalte zu indizieren? Diese Frage ist mir sofort in den Sinn gekommen, weil wir in unserer Anwendung noch keine VARCHAR-Spalte indiziert haben. Expertenratschläge / -vorschläge hierzu werden sehr geschätzt.
- Bei dieser aktuellen Abfrage und diesem Index ist die Antwortzeit von 14 Sekunden angemessen oder gibt es einen Spielraum für weitere Optimierungen? Welche Echtzeiterfahrungen / Meinungen anderer Benutzer basieren auf dieser Art von Tabellengröße und Antwortzeit?
HINWEIS: Meine tatsächlichen Anforderungen / Anwendungsfälle werden hier ausführlich erläutert .