Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: optymalizacja zapytania z kilkoma podzapytaniami
Forum PHP.pl > Forum > Bazy danych > PostgreSQL
php programmer
Hej mam zapytanie, które wykonuje się dość długo
ze względu na zawarte 3 podzapytania,
W wygląda to mniej więcej tak:

  1. SELECT *,
  2. ( SELECT SUM(a) FROM tabela2 WHERE tabela2.pole = tabela1.pole) AS wynik1 ),
  3. ( SELECT COUNT(*) FROM tabela2 WHERE tabela2.pole = tabela1.pole AND ...) AS wynik2 ),
  4. ( SELECT COUNT(*) FROM tabela2 WHERE tabela2.pole = tabela1.pole AND ...) AS wynik3 ),
  5. FROM tabela1


Jak widać podzapytania operują na tej samej (podrzędnej) tabeli a na dodatek
łaczą się tabelą główną za pomocą tej samej pary kluczy tj
tabela2.pole = tabela1.pole

Czy w związku z tym, można było by inaczej sformułowac zapytanie
żeby się szybciej wykonywało niż teraz ?
Zbłąkany
Ja bym utworzył dodatkowe tabele na liczniki i dla sum. Wtedy przy dodaniu rekordu do odpowiedniej tabeli inkrementujesz odpowiednie pole w tabeli licznik, za pomocą wyzwalacza oczywiście, tak samo z sumą. Potem wyciągnięcie tych danych nie stanowi problemu, jeśli masz liste pól, po których wyciągasz. Bo o ile funkcja sum() działa w miare przyzwoicie to funkcja count() ślamazarzy przy dużej liczbie rekordów smile.gif
AcidBurnt
dokładnie jak mówi zblakany nie ma tutaj co optymalizowac... napisac kilka trigerkow i ON INSERT ON DELETE i po problemie
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.