spravne oindexovani (II)

Ales Pour pour na princip.cz
Čtvrtek Září 14 10:39:36 CEST 2000


Zdravim vsechny,
pred casem jste mi tu radili s indexovanim ale asi mi neco uniklo...
Zajimalo by me, jak si mam vysvetlit nasledujici chovani (MySQL
3.22.25):

tabulka:

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!
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? 
Jde tuhle tabulku oindexvat lip? DIKY!

Ales Pour
Princip a.s.

P.S. Ten stroj na kterem MySQL bezi je pekna sunka (486/16MB,Linux), ale
alespon jsou videt rozdily.


Další informace o konferenci Test