Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zapytanie SQL - czy optymalne?
Forum PHP.pl > Forum > Bazy danych > MySQL
tommy4
  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.
pest
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 ?
tommy4
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ę.
pest
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.
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-2024 Invision Power Services, Inc.