Witam,
próbuję udrażniać jeden serwerek i zacząłem logować slow queries. Trafiają się tam w większości wpisy :
# Query_time: 15 Lock_time: 0 Rows_sent: 10 Rows_examined: 122307
SELECT f.*, AVG(l.value) AS vote_value, COUNT(l.value) AS vote_count FROM jos_downloads_files AS f LEFT JOIN jos_downloads_log AS l ON l.type=3 AND l.fileid=f.id WHERE f.containerid = 2 AND f.published=1 GROUP BY f.id ORDER BY filetitle LIMIT 690,10;
patrząc na Rows_examined: 122307 , sądzę, że jest do poprawienia.
zrobiłem :
mysql> describe (SELECT f.*, AVG(l.value) AS vote_value, COUNT(l.value) AS vote_count FROM jos_downloads_files AS f LEFT JOIN jos_downloads_log AS l ON l.type=3 AND l.fileid=f.id WHERE f.containerid = 2 AND f.published=1 GROUP BY f.id ORDER BY filetitle LIMIT 690,10);
+----+-------------+-------+-------+-------------------------------------------+-------------+---------+-------+------+----------------------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+-------+-------------------------------------------+-------------+---------+-------+------+----------------------------------------------+
| 1 | SIMPLE | f | ref | containerid,recommended,featured,opsystem | recommended | 2 | const | 599 | Using where; Using temporary; Using filesort |
| 1 | SIMPLE | l | range | userid,fileid,ipaddress | fileid | 1 | NULL | 98 | Using where |
+----+-------------+-------+-------+-------------------------------------------+-------------+---------+-------+------+----------------------------------------------+
2 rows in set (0.00 sec)
Czy z tego można coś wywnioskowac ? Czy powinienem stworzyć jakies nowe indeksy ? czy może rozpatrywać uszkodzenie istniejących ?
Jak robię : mysqlcheck -o , to
przelatuje tabele, przy większości pisze "Table is already up to date" a m.in. przy tych z zapytania podaje "OK" - czy to sugeruje, że coś z nimi robi ? optymalizuje ? naprawia indeksy ?
Proszę o sugestie.
M