spravne oindexovani [v MySQL?]
Honza Pazdziora
adelton na informatics.muni.cz
Pátek Červenec 28 11:38:24 CEST 2000
On Fri, Jul 28, 2000 at 11:10:58AM +0200, Ales Pour wrote:
>
> pred casem jsem tak nejak laicky pochytil k cemu jsou dobry indexy a
> navrhl tabulku [v MySQL]. Ted jsem zkusil EXPLAIN a dost me to
> prekvapilo!
> Strucne - mam nasledujici tabulku:
>
> stat SMALLINT
> id SMALLINT
> t INT
> "zbytek"
> PRIMARY KEY (stat,id,t)
>
> Hlavnim duvodem slozeneho klice je unikatnost zaznamu s touhle kombinaci
> casu 't', identifikatoru zdroje 'id' a stavu 'stat'. Protoze dotaz
> typicky vypada
> SELECT t,"neco ze zbytku" WHERE id=x AND t ... ORDER BY t ASC/DESC...
> doufal jsem, ze se klic uplatni (a bude to RYCHLEJSI!), ALE vypada to,
> ze to funguje jenom kdyz se ptam pouze na polozku(y) pres kterou(e) je
> klic, napr. t:
>
> mysql> explain select t from v_n where s_id=1;
Pokud je tim s_id mysleno id, tak je potreba ten primarni klic
vytvorit
PRIMARY KEY (id, stat, t)
Muzete totiz hledat pres podcast indexu, kterou ten index zacina.
V tomto pripade se pouzije zacatek (id), zatimco ve Vasem pripade mate
to id uprostred a index se pochopitelne nepouzije.
> Muzu to nejak zlepsit (zkusil jsem dat unikatni index na kombinaci
> stat,t,id a primarni klic na t a vysledky jsou stejny...)?
Opet, pokud hledate pres polozku a chcete, aby se pouzily indexy, je
nutne, aby u slozenych indexu byly ty hledane sloupce na zacatku.
--
------------------------------------------------------------------------
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