A helyes count () mysql - megállapítja keresők

Időről időre, ha elolvassa valaki másnak a kódját, látom, hogy egyes fejlesztők azt sugallják, különböző lehetőségek a COUNT () függvény szerezni kolichetsvo vonalak.
Például: count (*), count (id) (ahol id - az elsődleges kulcs). számítanak (0).
Felmerül a kérdés: „Milyen count () a helyes? Milyen ál-count-s? "
Az alapot a „korrektség” vette a sebességet a lekérdezés.
Run 3 kérése:


Mindhárom kapott futásidejű 0,03-0,04 mp. és furcsa módon, ugyanazt az eredményt - ez a szám 47915774.

Megtaláltam a dokumentáció:

Érdemes megjegyezni, hogy ennek hiányában egyéb vizsgálatok csináltam MyISAM asztal.

Valójában nincs semmi meglepő itt, mert megyünk tovább.
Ott van az én lemez index mező
`C_time` datetime NOT NULL default '0000-00-00 00:00:00'

3 végezze el ugyanazt a lekérdezést, de a korlátozás c_time:

Az első két esetben megkapja lekérdezés végrehajtása alatt 2,84-3,15 másodperc, a harmadik 27.46 - (.) 28.34 mp.

Kérem a belső szentélyében MySQL-guru - Magyarázza kérelmet, és elismerik, hogy az utóbbi esetben a területen Extra „fények”, hogy „A hol”, míg az első két kérdés Extra show „használata, ahol, az index”.

Ezen tragikus veszi, a tesztek alatt.
További érdekes vzgyanut hasonló eredményeket lekérdezés, amelyben ha elvégezték a nem kulcsfontosságú területen, és nem a MyISAM asztal.

Ui By the way, azt valamilyen oknál fogva számomra ismeretlen, használja count (*).

19 Responses to "helyes count () MySQL"

Vegye figyelembe, hogy ha használja az index elkészítéséhez sorok száma vizsgálóbizottság
SELECT COUNT ( `id`), mint CNT FROM` users` USE INDEX (as_id) Ahol a 'siteuser` = 1”. És a `active` = 1„:
A végrehajtási idő kevesebb, mint a count (*) és száma (0), azaz indexet használ jobban kezelhető „id”
Azt as_id Idex egy köteg id oszlopok siteuser és aktív.

Idex as_id kapcsolódik ID oszlopot, siteuser és aktív.

És mi id Suva?
Gyanítom, hogy van id elsődleges kulcsot, amely valójában az index.

Igen, de a minta - amely nemcsak a polgármesterek, hanem siteuser és aktív

de a minta - amely nemcsak a polgármesterek, hanem siteuser és aktív

És ha kész mintavételezése minden kombinációját az 5-mezők - akkor 120 indexek minden mezőt létrehozni kombinációk?

Mi akadályozza MySQL használatát index 2?
Az első - elsődleges kulcs (id), második kulcs (siteuser, aktív)
Vagy akár 3: elsődleges kulcs (id), a második kulcs (siteuser) gomb (aktív)?

Sense hozzá id kompozit index egyszerűen nincs: ha id van megadva, akkor a MySQL fogja használni elsődleges kulcs és egyéb indexek sem nézett.
Ha a kérelem id nincs megadva, akkor a kompozit index is halott borogatás, mint index pár (siteuser, aktív) nem, már csak három (id, siteuser, aktív).

Jó kérdés, hogy akadályozza meg, mert ő nem használja őket.
És kompozit index és használja megadásával az említett módosítások kérelmet ráta 8 másodperc 0,7 másodperc.
Van étel az agyban.

Miért MySQL nem használhat index - egy külön kérdés, és a COUNT függvény nem alkalmazható.
Nagyon is lehetséges, hogy a becsült sorok számát az eredmény több mint 15-20% -a az összes - ebben az esetben, az optimalizáló azt hiszi, hogy jobb tölteni FullScan táblázat segítségével indexek. De sajnos néha téved.

Ui Remélem, hogy a kérdés az, hogy miért nem szabad az elsődleges kulcsot a kompozit index nem éri meg?

Köszönöm, nagyon hasznos post.
Tettem a józanság a belső optimalizáló mysql.
nem sokkal a sokk, élni és tanulni. - |

EXPLAIN SELECT SQL_NO_CACHE száma (0)
FROM `news`
Ahol a 'type` = 2

id | select_type | asztal | típusa | possible_keys | kulcs | key_len | ref | sorok | extrara
1 | EGYSZERŰ | hírek | ref | típusa | típusú 4 | const | 8623 | használata, ahol, használata index

és amikor gróf (id) csak használata, ahol a nagy naplók.

Hány sort az összes asztal?
Hányan vannak hatálya alá tartozni `type` = 2?
Milyen típusú mező típus?
Eszerint a beépített index?

Van egy gyanú, hogy a count (0) optimalizáló úgy dönt, hogy olcsóbb elvégezni FullScan összes asztal használata helyett egy index (ilyen dolgok történnek, ha a várható rekordok száma meghaladja 20-25% -a).
Miért ebben az esetben ugyanaz a nem történik a count (id) - nehéz megmondani.