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