Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zapytanie SQL - czy optymalne?
tommy4
post
Post #1





Grupa: Zarejestrowani
Postów: 288
Pomógł: 12
Dołączył: 2.12.2005

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


  1. SELECT vote, COUNT( vote )
  2. FROM polls_votes WHERE poll = 'f' AND FROM_UNIXTIME( `time` , '%Y' ) *1 =2008 AND FROM_UNIXTIME( `time` , '%m' ) *1 =4
  3. GROUP BY vote
  4. ORDER BY vote


Witam, czy takie zapytanie będzie optymalne (np. dla 100 000 głosów w ankiecie na poprzedni miesiąc)?

Chodzi mi o to, czy lepiej grupować, czy może dopiero w PHP zliczać głosy np. w tablicy, a MySQL zostawić tylko wyciągnięcie danych.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
pest
post
Post #2





Grupa: Zarejestrowani
Postów: 78
Pomógł: 15
Dołączył: 10.12.2007
Skąd: Lublin

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


Jeśli chodzi o optymalizacje i masz np. indeksy na polu `time`, to silnik bazy danych z nich nie skorzysta. Musiałbyś z PHP podać unixtime, żeby można było bezpośrednio porównać z polem `time`, a nie za pomocą funkcji. To na start winksmiley.jpg

Ale, że się tak zapytam... w ogóle działa ci to zapytanie ?
Go to the top of the page
+Quote Post
tommy4
post
Post #3





Grupa: Zarejestrowani
Postów: 288
Pomógł: 12
Dołączył: 2.12.2005

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


Działa...

  1. <?php
  2. $time = $fmw['main']->getTime();
  3. $year = strftime("%Y", $time);
  4. $month = strftime("%m", $time);
  5. if(intval(--$month) == 0)
  6. {
  7. $year--;
  8. $month = 12;
  9. }
  10. $result = $fmw['db']->query("SELECT pv.vote, c.surname, COUNT(pv.vote) AS count FROM polls_votes AS pv, cadre AS c WHERE pv.poll = 'f' AND c.id = pv.vote AND FROM_UNIXTIME(pv.`time`, '%Y')*1 = ".$year." AND FROM_UNIXTIME(pv.`time`, '%m')*1 = ".$month." GROUP BY pv.vote ORDER BY count DESC LIMIT 3");
  11. ?>


Mam tak zrobione, po prostu dałem tutaj uproszczoną wersję.
Go to the top of the page
+Quote Post
pest
post
Post #4





Grupa: Zarejestrowani
Postów: 78
Pomógł: 15
Dołączył: 10.12.2007
Skąd: Lublin

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


Coś wcześniej nie mogłem załapać jak działa to zapytanie, ale teraz już mniej więcej chwytam.

Jeśli chodzi o pytanie:
czy lepiej grupować, czy może dopiero w PHP zliczać głosy np. w tablicy, a MySQL zostawić tylko wyciągnięcie danych?

Odpowiedź brzmi:
Lepiej grupować, mniejsza odpowiedź z bazy danych, a sam silnik bazy danych mając więcej informacji co jest tak na prawdę potrzebne, może lepiej rozplanować poszukiwanie.
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 - 17:01