Staram sie jakoś zoptymalizować zapytanie bo obecnie trwa bardzo długo. Nie wiem czy to wina bazy
(a słyszałem bardzo wiele złego o tej bazie jeśli idzie o używaną pamięci),
czy może moje zapytanie SQL jest nie optymalne.
O to moje zapytanie SQL w jednym wywołaniu:
SELECT A.ktm, A1.wartosc AS liniawww, A4.wartosc AS kategoria, T.nazwa, T1.opispod, T1.opisroz, C.cenanet AS cenadetal, C1.cenanet AS cenahurt, TP.ref, B.ext FROM atrybuty A JOIN atrybuty A1 ON (A1.ktm = A.ktm AND A1.cecha = 'l' AND A1.wersjaref = A.wersjaref) JOIN atrybuty A2 ON (A2.ktm = A.ktm AND A2.cecha = 'r' AND A2.wartosc = '1' AND A2.wersjaref = A.wersjaref) JOIN atrybuty A3 ON ((A3.cecha = A1.cecha) AND (A3.wartosc = A1.wartosc) AND (A3.ktm containing('www_'))) JOIN atrybuty A4 ON (A4.ktm = A3.ktm AND A4.cecha = 'gr') JOIN towary T ON (T.ktm = A.ktm AND T.witryna = '1' AND T.akt = '1') JOIN towary T1 ON (T1.ktm = A3.ktm AND T1.witryna = '1' AND T1.akt = '1') JOIN cennik C ON (C.ktm = A.ktm AND C.cennik = '62' AND C.wersja = '0') JOIN cennik C1 ON (C1.ktm = A.ktm AND C1.cennik = '63' AND C1.wersja = '0') JOIN towpliki TP ON (TP.ktm = A3.ktm AND TP.numer = '1') JOIN s_binary B ON (B.fileref = TP.ref) WHERE A.cecha = 'g' AND ((A.wartosc = 'AR') OR (A.wartosc = 'GPS') OR (A.wartosc = 'ARUM'))
Czas oczekiwania na wynik tego zapytania trwa od 5 do 12 min.

oraz zapytanie SQL w 17 zapytaniach: (Najpierw jedno zapytanie:)
SELECT A.ktm, A.wartosc, A1.wartosc AS grupa, A2.wartosc AS nazwa, T.opispod, T.opisroz, TP.ref, B.ext FROM atrybuty A JOIN atrybuty A1 ON (A1.ktm = A.ktm AND A1.cecha = 'gr') JOIN atrybuty A2 ON (A2.ktm = A.ktm AND A2.cecha = 'l') JOIN atrybuty A3 ON (A3.ktm = A.ktm AND A3.cecha = 'podstawowy' AND A3.wartosc = '1') JOIN towary T ON (T.ktm = A.ktm AND T.witryna = '1') JOIN towpliki TP ON (TP.ktm = A.ktm AND TP.numer = '1') JOIN s_binary B ON (B.fileref = TP.ref) WHERE A.cecha = 'g' AND (A.wartosc = 'AR' OR A.wartosc = 'GPS' OR A.wartosc = 'ARUM')
a następnie wyniki poprzedniego zapytania puszczam w pętli foreach
i dla każdego wiersza wywołuje kolejne zapytanie SQL (jest takich wywołań 16):
SELECT A.ktm, C.cenanet AS cenadetal, C1.cenanet AS cenahurt, T.nazwa FROM atrybuty A JOIN atrybuty A1 ON (A1.ktm = A.ktm AND A1.cecha = 'g' AND A1.wartosc = '".$a_grprod['wartosc']."') JOIN atrybuty A2 ON (A2.ktm = A.ktm AND A2.cecha = 'r' AND A2.wartosc = '1') JOIN towary T ON (T.ktm = A.ktm AND T.witryna = '1') JOIN cennik C ON (C.ktm = A.ktm AND C.cennik = '62' AND C.wersja = '0') JOIN cennik C1 ON (C1.ktm = A.ktm AND C1.cennik = '63' AND C1.wersja = '0') WHERE A.wartosc = '".$a_grprod['nazwa']."' AND A.cecha = 'l'
Czas oczekiwania na wynik tych dwóch powyższych zapytań (z czego drugie zapytanie jest wywołane w pętli 16 razy) trwa od 1 do 2 min.

Wyniki tych zapytań są identyczne.
I teraz pytanie, dlaczego tak sie dzieje...
Może zapytania SQL są jakoś przeze mnie mało efektywnie stworzone..
Wielkie dzięki za jakąkolwiek pomoc, sugestie albo uwagii...
Pozdrawiam...