Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> wydajność zapytania
acztery
post
Post #1





Grupa: Zarejestrowani
Postów: 945
Pomógł: 7
Dołączył: 15.03.2005
Skąd: katowice

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


witam mam takie zapytanie:

  1. SELECT * ,
  2. (SELECT count(*) FROM stat WHERE stat.D='1' AND DocId=www.Id ) AS a1,
  3. (SELECT count(*) FROM stat WHERE stat.D='2' AND DocId=www.Id ) AS a2,
  4. (SELECT count(*) FROM stat WHERE stat.D='3' AND DocId=www.Id ) AS a3,
  5. (SELECT count(*) FROM stat WHERE stat.D='4' AND DocId=www.Id ) AS a4,
  6. (SELECT count(*) FROM stat WHERE stat.D='5' AND DocId=www.Id ) AS a5,
  7. (SELECT count(*) FROM stat WHERE stat.D='6' AND DocId=www.Id ) AS a6,
  8. (SELECT count(*) FROM stat WHERE stat.D='7' AND DocId=www.Id ) AS a7,
  9. (SELECT count(*) FROM stat WHERE stat.D='8' AND DocId=www.Id ) AS a8,
  10. (SELECT count(*) FROM stat WHERE stat.D='9' AND DocId=www.Id ) AS a9,
  11. (SELECT count(*) FROM stat WHERE stat.D='10' AND DocId=www.Id ) AS a10,
  12. (SELECT count(*) FROM stat WHERE stat.D='11' AND DocId=www.Id ) AS a11,
  13. (SELECT count(*) FROM stat WHERE stat.D='12' AND DocId=www.Id ) AS a12,
  14. (SELECT count(*) FROM stat WHERE stat.D='13' AND DocId=www.Id ) AS a13,
  15. (SELECT count(*) FROM stat WHERE stat.D='14' AND DocId=www.Id ) AS a14,
  16. (SELECT count(*) FROM stat WHERE stat.D='15' AND DocId=www.Id ) AS a15,
  17. (SELECT count(*) FROM stat WHERE stat.D='16' AND DocId=www.Id ) AS a16,
  18. (SELECT count(*) FROM stat WHERE stat.D='17' AND DocId=www.Id ) AS a17,
  19. (SELECT count(*) FROM stat WHERE stat.D='18' AND DocId=www.Id ) AS a18,
  20. (SELECT count(*) FROM stat WHERE stat.D='19' AND DocId=www.Id ) AS a19,
  21. (SELECT count(*) FROM stat WHERE stat.D='20' AND DocId=www.Id ) AS a20,
  22. (SELECT count(*) FROM stat WHERE stat.D='21' AND DocId=www.Id ) AS a21,
  23. (SELECT count(*) FROM stat WHERE stat.D='22' AND DocId=www.Id ) AS a22,
  24. (SELECT count(*) FROM stat WHERE stat.D='23' AND DocId=www.Id ) AS a23,
  25. (SELECT count(*) FROM stat WHERE stat.D='24' AND DocId=www.Id ) AS a24,
  26. (SELECT count(*) FROM stat WHERE stat.D='25' AND DocId=www.Id ) AS a25,
  27. (SELECT count(*) FROM stat WHERE stat.D='26' AND DocId=www.Id ) AS a26,
  28. (SELECT count(*) FROM stat WHERE stat.D='27' AND DocId=www.Id ) AS a27,
  29. (SELECT count(*) FROM stat WHERE stat.D='28' AND DocId=www.Id ) AS a28,
  30. (SELECT count(*) FROM stat WHERE stat.D='29' AND DocId=www.Id ) AS a29,
  31. (SELECT count(*) FROM stat WHERE stat.D='30' AND DocId=www.Id ) AS a30,
  32. (SELECT count(*) FROM stat WHERE stat.D='31' AND DocId=www.Id ) AS a31
  33.  
  34. FROM www GROUP BY www.Id


Ale przy np 40 tys rekordów w bazu stat mam komunikat o braku pamięci. Jak wywołam zapytanie bezpośrednio w phpmyadminie jest. może ktoś ma jakiś pomysł. Indexy są
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
phpion
post
Post #2





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




To co pokazałeś w pierwszym poście to jakiś koszmar! Nie sądziłem, że ktoś jest w stanie trzaskać (wymyśleć!) takie zapytanie... Ja bym Ci sugerował inne podejście do sprawy oraz zapoznanie się z tematyką:
- grupowanie (GROUP BY),
- podzapytania skorelowane.
Wykorzystując grupowanie jesteś w stanie bez problemu otrzymać statystyki, o które Ci chodzi. Jest tu jednak jeden problem: jeżeli w tabeli 'stat' nie będzie żadnych odwiedzin dla któregoś dokumentu to nie zostanie on uwzględniony w zbiorze wynikowym.
Wykorzystując podzapytanie skorelowane ominiesz powyższą niedogodność ale samo zapytanie może być mniej wydajne (szczególnie przy większej ilości dokumentów).
Decyzja, którą drogą pójdziesz należy do Ciebie.
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 10.10.2025 - 07:31