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