We are in the process of migrating this forum. A new space will be available soon. We are sorry for the inconvenience.

Zapytanie MySQL - jak przyspieszyc? Aż 8 sek! :|


Relay
11-06-2008, 00:06
Bez sensu takie gdybanie, pokaż indeksy z tabel i co wyświetla Ci explain.

utf
16-05-2008, 16:43
Dodaj explain przed selectem i pokaż co pokazuje.

Poza tym robienie tylu złączeń to też nie jest dobre rozwiązanie

sowiq
16-05-2008, 15:17
Witam!
Mam problem. Chodzi mi o zapytanie MySQL, które wykonuje się ponad 8 sek na dobrym serwerze.

Oto ono:

SELECT * FROM `items`, `img`, `style_muzyczne`, `kraje`, `labels` WHERE (`items`.`styl` = '29' OR `items`.`styl2` = '29' OR `items`.`styl3` = '29' OR `items`.`styl4` = '29') AND `items`.`typ` = 'vinyl' AND `img`.`id` = `items`.`i_id` AND `style_muzyczne`.`s_id` = `items`.`styl` AND `kraje`.`k_id` = `items`.`kraj` AND `labels`.`l_id` = `items`.`label` GROUP BY `items`.`i_id` ORDER BY `items`.`dostepnosc` = 'dostepna' DESC, `items`.`dostepnosc` = 'soon' DESC, `items`.`dostepnosc` = 'niedostepna' DESC, `items`.`data_wydania` DESC LIMIT 0, 20

Sęk w tym, że ilości rekordów w bazie są następujące:
- items: 110 k
- labels: 17 k
- img: 110 k
- odsluchy: 256 k

Z MySQL nie jestem ekspertem, dlatego mam pytanie, czy to zapytanie można jakoś zoptymalizować. Czy taka ilośc rekordów (w sumie nie jest to jakaś strasznie duża liczba) może mieć wpływ na tak wolne działanie?

Zrobiłem co prawda cache'owanie całej wyświetlanej listy, ale to bez sensu, bo lista musi być od nowa wygenerowana po dodaniu nowego rekordu... Poza tym pierwsze wyświetlenie listy rekordów trwa te nieszczęsne 8 sek.

Jestem trochę zdesperowany :/

Any ideas?

Pozdrawiam!
sowiq