Autor | Zpráva | ||
---|---|---|---|
grimword Profil |
#1 · Zasláno: 24. 7. 2009, 03:14:14
Potřeboval by jsem poradit, jak napsat co nejefektivnější (nejjednodušší) MySQL dotaz.
Struktura tabulky id------zvire 1------pes 2------kocka 3------kocka 4------pes 5------kocka 6------kocka Požadovaný výsledek [počet] čeho [2]pes [4]kočka nejlépe řazeno dle abecedy zvířete |
||
Joker Profil |
#2 · Zasláno: 24. 7. 2009, 07:39:51
SELECT zvire, COUNT(id) FROM tabulka GROUP BY zvire ORDER BY zvire
|
||
ninja Profil |
#3 · Zasláno: 24. 7. 2009, 11:38:15
grimword: pokud chcete jit do detailu, je potreba analyzovat cetnost opakovani a jedinecnost hodnot ve sloupci zvire a v pripade casteho opakovani predelat strukturu na id--zvire_id JOIN zvire_id--zvire.
V kazdem pripade nasadit na sloupec zvire index. |
||
grimword Profil |
#4 · Zasláno: 24. 7. 2009, 15:55:02
„pokud chcete jit do detailu, je potreba analyzovat cetnost opakovani a jedinecnost hodnot ve sloupci zvire a v pripade casteho opakovani predelat strukturu na id--zvire_id JOIN zvire_id--zvire“
není mi moc jasné, jak by jsem měl tabulku předělat, a jak by měl poté vypadat dotaz? „SELECT zvire, COUNT(id) FROM tabulka GROUP BY zvire ORDER BY zvire“ proč zrovna count(id)? |
||
grimword Profil |
#5 · Zasláno: 24. 7. 2009, 17:39:50
prosím:)
|
||
Kajman_ Profil * |
#6 · Zasláno: 24. 7. 2009, 17:44:57
proč zrovna count(id)?
Stejný výsledek dá i count(*) a pokud nemůže být zvíře null, tak i count(zvire) |
||
Joker Profil |
#7 · Zasláno: 24. 7. 2009, 17:48:52
grimword:
„proč zrovna count(id)?“ Proč ne? :-) Když počítám řádky, vždycky podle primárního klíče... podle něčeho se počítat musí a primární klíč je nejlepší kandidát. Navíc ta tabulka má jen dva sloupce, takže zrovna velký výběr není :-) Jak píše Kajman, šlo by použít i count(*), ale žiju v naprosto neověřeném (a možná tedy mylném) dojmu, že count(id) bude rychlejší, než count(*). |
||
grimword Profil |
#8 · Zasláno: 25. 7. 2009, 03:42:32
díky vaší pomoci úspěšně vyřešeno
|
||
Joker Profil |
#9 · Zasláno: 25. 7. 2009, 09:21:09
Pro zajímavost doplním, že jsem vyzkoušel to count(id) vs count(*) na své zkušební databázi a výsledky jsou takové neurčité.
Vypadá to, že pro tabulky v pevném formátu je o něco rychlejší count(*), zatímco pro tabulky v dynamickém formátu o něco rychlejší count(id) (metodika: pevná testovací tabulka INT (PK) - INT, dynamická INT (PK) - INT - VARCHAR(5), každá 10 000 záznamech, dotazy: SELECT count(*) FROM tabulka t JOIN tabulka t1 WHERE t1.id > 5000 -- respektive t1.id místo * ...čili ve výsledku se počítalo 50 milionů řádků ze 100 milionů) |
||
Časová prodleva: 15 let
|
0