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 Test