peku33
19.10.2010, 16:52:09
Witajcie!
Stworzyłem sobię tabelę, w której trzymam dane (chwilowo ok 1,5K rekordów).
Starałem się, aby baza działała jak najszybciej, wszystko ok... do czasu
Tabelka składa się z pól INT / BIGINT / TINYINT / VARCHAR(64 - 255) / ENUM(2 wartości) / DOUBLE / TIMESTAMP / i nieszczęsne pola LONGTEXT
Do bazy nie dodaję żadnych rekordów, jedynie je modyfikuję. Z początku baza działa jak należy, niestety z czasem zaczyna coraz bardziej zwalniać.
Po 2 dniach zapytanie trwa ponad 1 sekundę(!). Optymalizacja bazy znów przywraca jej pierwotną prędkość.
Dane wyszukuję głównie po polach INT / BIGINT itd. na główne pola wg. których sortuję / szukam są indexy (w tym primary).
Czy powodem takiego spowolnienia bazy może być fragmentacja danych ze względu na pole LONGTEXT? Czy pomoże jego zamiana na varchar?
Jak inaczej mogę przyspieszyć bazę?
nospor
19.10.2010, 17:59:09
zrob EXPLAIN na zapytaniu które ci muli a może sie rozjasni male co nie co
peku33
19.10.2010, 18:12:08
Kod
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE s ref typ,fails_to_del,state state 1 const 1212 Using where; Using temporary; Using filesort
1 SIMPLE t ALL PRIMARY NULL NULL NULL 2 Using where
Coś takiego
nospor
19.10.2010, 18:15:04
No i pokaż jeszcze to zapytanie
peku33
19.10.2010, 18:29:03
EXPLAIN SELECT * FROM ` v_lista_wyswietlane`; //Zwykle jest limit x, x+30
struktura widoku v_lista_wyswietlane:
CREATE VIEW v_lista_wyswietlane AS
SELECT rank, nazwa_pelna, hostname, ip, onlineplayers, maxplayers, map, platform, secure, os, typ, country FROM serwery AS s JOIN typy as t ON s.typ = t.id WHERE s.state='online' AND fails_to_del > 0 ORDER BY rank ASC
w tabeli serwery index na: ip, typ, flags, fails_to_del, rank, hostname, map, state owner, z czego na IP jest PRIMARY