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