spravne oindexovani (II)
Jan Serak
sherry na pikebo.cz
Čtvrtek Září 14 14:58:18 CEST 2000
Ales Pour wrote:
>
> Zdravim vsechny,
> pred casem jste mi tu radili s indexovanim ale asi mi neco uniklo...
> Zajimalo by me, jak si mam vysvetlit nasledujici chovani (MySQL
> 3.22.25):
>
> tabulka:
>
> stat SMALLINT,id SMALLINT,t INT,"neco",PRIMARY KEY (id,t,stat)
>
> typicky dotaz:
>
> SELECT "neco",t FROM tabulka WHERE id=n AND t vetsi/mensi/mezi ORDER BY
> t ASC/DESC [LIMIT n]
>
> A ted, EXPLAIN vypada takhle (tabulka ma cca 370 tisic zaznamu, soubor
> ma velikost cca 10 MB):
>
> mysql> EXPLAIN SELECT x,y,t FROM ls_v_n WHERE id=1 ORDER BY t DESC LIMIT
> 1;
> +--------+------+---------------+---------+---------+------+------+-------+
> | table | type | possible_keys | key | key_len | ref | rows |
> Extra |
> +--------+------+---------------+---------+---------+------+------+-------+
> | ls_v_n | ref | PRIMARY | PRIMARY | 2 | ??? | 3689
> | |
> +--------+------+---------------+---------+---------+------+------+-------+
>
> To nevypada spatne, ale cas zpracovani tohodle dotaz je bez ohledu na
> poradi hledanych sloupcu, zpresnovani casoveho kriteria, razeni podle
> casu nebo pridani samostaneho indexu na t konstantni, a to okolo 30
> sekund.
Nezapomente, ze trideny vysledne mnoziny zaznamu taky neco vezme.
> Odstranil jsem ten primarni klic a funguje to STEJNE rychle!
Pokud je trideni dostatecne pomale, tak vyber z tabulky pres index
nebo sekvencne pres vsecka data nemusi byt rozhodujicim kriteriem.
Zkuste to srovnat u dotazu bez order by a uvidite, jak index bude
znat.
Jan Serak
Další informace o konferenci Test