spravne oindexovani (II)
Honza Pazdziora
adelton na fi.muni.cz
Čtvrtek Září 14 11:30:29 CEST 2000
On Thu, 14 Sep 2000 10:39:36 +0200, Ales Pour <pour na princip.cz> wrote:
>
> 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.
> Odstranil jsem ten primarni klic a funguje to STEJNE rychle!
Jake jsou casy dotazu
select id from tabulka where id = ?
select id from tabulka where id = ? order by t
? Kazdopadne vysledek ma tech 3689 zaznamu, to je pravda?
> Kdyz vytvorim klic PRIMARY KEY(t,id,stat), tak ASC razeni trva okolo
> 12-17 sekund, DESC razeni bez vymezeni casu t (vetsi/mensi/mezi) trva
> cca 3-5 sekund, ale s vymezenim skoro 2 minuty. Pritom EXPLAIN je:
>
> mysql> EXPLAIN SELECT x,y,t,rst FROM ls_v_n WHERE s_id=1 ORDER BY t DESC
> LIMIT 1;
> +--------+------+---------------+------+---------+------+--------+------------+
> | table | type | possible_keys | key | key_len | ref | rows |
> Extra |
> +--------+------+---------------+------+---------+------+--------+------------+
> | ls_v_n | ALL | NULL | NULL | NULL | NULL | 368913 | where
> used |
> +--------+------+---------------+------+---------+------+--------+------------+
>
> Je to OK?
Vzhledem k tomu, ze v tom dotazu neni ve where pouzit sloupec t, je
type ALL v poradku, proste projde celou tabulku.
> Jde tuhle tabulku oindexvat lip? DIKY!
A na jake vlastne dotazy ji chcete optimalizovat?
> P.S. Ten stroj na kterem MySQL bezi je pekna sunka (486/16MB,Linux), ale
> alespon jsou videt rozdily.
Ano, to by odpovidalo tomu, ze setridit 3k zaznamu mu vezme pulminuty,
to by mohlo byt.
--
------------------------------------------------------------------------
Honza Pazdziora | adelton na fi.muni.cz | http://www.fi.muni.cz/~adelton/
.project: Perl, DBI, Oracle, MySQL, auth. WWW servers, MTB, Spain.
Petition for a Software Patent Free Europe http://petition.eurolinux.org
------------------------------------------------------------------------
Další informace o konferenci Databases