Temat: Select zabiera straaasznie duzo czasu
Witam
Mam taki problem z baza:
Sa 2 tabele - dla uproszczenia nazwe je master i detail
obie maja pole GID (varchar(32), unique, primary key)
w tabeli master jest ok 32 tysiecy rekordow, w tabeli detail jest okolo 20 tysiecy rekordow;
do obydwu tabel dochodza rekordy w tępie mniej wiecej 1 rekord na 5 minut, w mniej wiecej takim samym tępie niektore z nich sa kasowane. (tu nie ma problemu z czasem, wykonanie delete/inserta trwa ponizej 20ms)
z kolei wywolanie zapytania:
SELECT GID FROM master WHERE GID NOT IN (SELECT GID FROM details);
trwa zazwyczaj ok 200 (sic!) sekund - nie mam zbyt duzego doswiadczenia w z postgreesem ale to zapytanie nie wydaje sie jakos szczegolnie ciezkie (chce poprostu wybrac GIDy wszystkich rekordow dla ktorych nie ma informacji o detalach w drugiej tablicy (jest ich zazwyczaj 16 tysiecy (16 tysiece * varchar(32) to nie jest duzo danych ...).
jesli zrobie vacuum'a to sytuacja poprawia sie ale tylko dopuki nie zmieni sie ok 200 rekordow, potem znowu jakas kosmiczna ilosc czasu zajmuje to zapytanie.
cala baza nie jest duza, (170MB) - posiada tylko te 2 tabele
jakies pomysly co moze byc nie tak ? (reindexowanie nie pomaga, klucze i w jednej i w drugiej tabeli sa unikalne)
czy jest jakis lepszy sposob na sformulowanie tego zapytania ?