Temat: optymalizacja zapytania SQL
mam problem z optymalizacją zapytań
Mam 2 tabele temat i zdarzenie. Jeden temat może mieć wiele zdarzeń.
Mam 3 zapytania, które dają ten sam rezultat:
1.
SELECT t.nazwa FROM temat t, zdarzenie z
WHERE z.temat_id1 = t.temat_id AND z.typ='AAA'
2.
SELECT t.nazwa FROM temat t
WHERE t.temat_id in (
SELECT z.temat_id1 FROM zdarzenie z
WHERE z.temat_id1=t.temat_id AND z.typ='AAA')
3.
SELECT t.nazwa FROM temat t
WHERE t.temat_id in (
SELECT z.temat_id1 FROM zdarzenie z
WHERE z.typ='AAA')
Nie mogę za bardzo użyć pierwszego, natomiast nie wiem który z dwóch kolejnych jest poprawny.
Do tej pory stosowałem wersję nr 2 i było dobrze (szybko) natomiast "coś" się stało z bazą i teraz zdecydowanie szybciej wykonuje się 3, a 2 ma teraz czas zupełnie nieakceptowalny. Zupełnie odwrotnie niż wcześniej
Może to kwestia parametrów bazy, ale na tym zupełnie się nie znam.
tabela temat ma ok 300 tys rekordów a zdarzenie ok 6 mln
zrobiony był VACUUM , ANALYZE i reindeksacja
tabele nie mają kluczy, ale są indeksy na kolumnach t.temat_id i z.temat_id1
Muszę przerzucić się na 1 albo 3 ?
Czy może da się coś zrobić aby pozostać przy zapytani nr 2.
Proszę o wszelki opinie i uwagi - może ktoś miał podobny problem