spravne oindexovani [v MySQL?]

Ales Pour pour na princip.cz
Pátek Červenec 28 11:10:58 CEST 2000


Zdravim,
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;
| table | type  | possible_keys | key     | key_len | ref  | rows   |
Extra                  
+-------+-------+---------------+---------+---------+------+--------+-----------------------|
v_n   | index | NULL          | PRIMARY |       8 | NULL | 368152 |
where used; Using index |
+-------+-------+---------------+---------+---------+------+--------+-----------------------

Jinak to vypada:

mysql> explain select t,x from v_n where s_id=1;
+-------+------+---------------+------+---------+------+--------+------------+
| table | type | possible_keys | key  | key_len | ref  | rows   |
Extra      |
+-------+------+---------------+------+---------+------+--------+------------+
| v_n   | ALL  | NULL          | NULL |    NULL | NULL | 368152 | where
used |
+-------+------+---------------+------+---------+------+--------+------------+
mysql> explain select t,x from v_n where s_id=1 order by t desc;
+-------+------+---------------+------+---------+------+--------+---------------------------table
| type | possible_keys | key  | key_len | ref  | rows   |
+-------+------+---------------+------+---------+------+--------+---------------------------|
v_n   | ALL  | NULL          | NULL |    NULL | NULL | 368152 | where
used; Using filesort |
+-------+------+---------------+------+---------+------+--------+---------------------------

Je tohle obecna vlastnost optimlizatoru nebo specifikum MySQL (3.23.18)?
Muzu to nejak zlepsit (zkusil jsem dat unikatni index na kombinaci
stat,t,id a primarni klic na t a vysledky jsou stejny...)?
Mockrat diky!

Ales Pour
Princip a.s.


Další informace o konferenci Databases