Autor Zpráva
hugo123
Profil *
Ahojte,

mam na Vas taku otazku, ked chcem zistit pocet vysledkov dopytu, tak ktore riesenie je najrychlejsie?

Ja poznam tieto dve moznosti:

$result = $conn -> query("SELECT count(id) as pocet_id FROM  ...");                
$row = $result->fetch_assoc();                
$num_results = $row['pocet_id']; 

$result = $conn -> query("SELECT id FROM ...");            
$num_results = $result->num_rows; 

Co si prosim myslite?

Vopred dakujem velmi pekne za Vase cenne rady.
Joker
Profil
hugo123:
• Když je potřeba zjistit pouze počet záznamů, použije se spočítání záznamů v databázi (SELECT COUNT).
• Když je potřeba vybrat ty záznamy a kromě toho i vědět kolik se jich vybralo, použije se spočítání záznamů v PHP.
hugo123
Profil *
Joker:
Dikes za nazor,a teda ked potrebujem zistit IBA pocet zaznamov a pouzijem count(), tak o kolko to bude rychlejsie prosim?

Vopred dakujem pekne za odpoved.
Alphard
Profil
To záleží na velikosti tabulky, výběr všech záznamů by mohl v extrémním případě i narazit na limity a položit aplikaci.

Tohle je typ akce, u které se nepřemýšlí o kolik je to rychlejší a použije se správné řešení.
Joker
Profil
hugo123:
To se liší podle konkrétní situace a není možné to přesně obecně říct.

Ale rozdíl je tento:
SELECT COUNT záznamy spočítá v databázi a do PHP vrátí jedno číslo.
SELECT + num_rows záznamy vybere a všechny je z databáze přenese do PHP, kde se pak spočítají.

Tj. pokud nepotřebuji data těch záznamů, ale jen vědět kolik jich je, ve druhém případě se zbytečně přenáší kvanta dat z databáze do PHP.
(když chci i data záznamů, musím je přenést tak jako tak, takže vyjde lépe to spočítat v PHP)
Dusann
Profil
hugo123:
ked potrebujem zistit IBA pocet zaznamov a pouzijem count(), tak o kolko to bude rychlejsie prosim?

Najrýchlejšie je, ak použijes MyISAM engine a COUNT(*) kde nedefinuješ ďalšie stĺpce a podmienky výpisu, čiže napr.:

SELECT COUNT(*) FROM tabulka;

MyISAM totiž priamo ukladá počet všetkých záznamov tabuľky, takže nič sa nepočíta, iba ti túto hodnotu server priamo vráti.

Ďalšia vec, ktorú treba brať do úvahy je, že COUNT(*) počíta záznamy s NULL hodnotami, kdežto COUNT (stlpec) ignoruje záznamy kde má stlpec NULL.

Rýchlosť v prípade COUNT (stlpec) bude pravdepodobne závisieť od toho či konkrétny stĺpec máš ako index, alebo nie. Ak ho ako index nemáš asi prebehne full table scan, aby sa mohlo vyhodnotiť ktoré záznamy majú NULL a ktoré nie.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: