Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> optymalizacja zapytania z kilkoma podzapytaniami
php programmer
post
Post #1





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 5
Dołączył: 8.11.2004
Skąd: trójmiasto

Ostrzeżenie: (0%)
-----


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 ?

Ten post edytował php programmer 19.06.2007, 12:36:07
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
Zbłąkany
post
Post #2


Administrator serwera


Grupa: Developerzy
Postów: 521
Pomógł: 13
Dołączył: 2.04.2004
Skąd: 52°24' N 16°56' E

Ostrzeżenie: (0%)
-----


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


--------------------
Środowisko: Gentoo 2008.0 | Apache | PHP5 | PostgreSQL | MySQL | Postfix
Workstation: Gentoo 2008.0 | Firefox
Thomas Alva Edison: "Aby coś wynaleźć wystarczy odrobina wyobraźni i sterta złomu ..."
Odpowiedź na każde pytanie typu "Jak ...": "Nie da się, to nie PostgreSQL"
Go to the top of the page
+Quote Post
AcidBurnt
post
Post #3





Grupa: Zarejestrowani
Postów: 215
Pomógł: 1
Dołączył: 13.04.2003
Skąd: z ławki przed blokiem

Ostrzeżenie: (0%)
-----


dokładnie jak mówi zblakany nie ma tutaj co optymalizowac... napisac kilka trigerkow i ON INSERT ON DELETE i po problemie
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 14:39