1

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

2

Odp: optymalizacja zapytania SQL

Jakieś plany wykonania zapytań? I czemu nie możesz użyć pierwszego sposobu albo chociaż join'ów?

Ostatnio edytowany przez rski (2009-06-16 19:15:04)