Poprawiam wyszukiwarkę portalową.
Problem tkwi w tym, że w godzinach szczytu, że zapytanie zaczyna zajeżdżać serwer.
Zapytanie, które jest aktualnie (przykład):
SELECT SQL_CALC_FOUND_ROWS SQL_CACHE post.id, post.autor, post.date AS newsdate, short_story AS story, post.xfields AS xfields, title, descr, keywords, category, alt_name, comm_num AS comm_in_news, allow_comm, rating, flag, editdate, editor, reason, view_edit, count( search_wordmatch.news_id) AS count FROM search_wordlist, search_wordmatch, post WHERE ( search_wordlist.id = search_wordmatch.word_id AND search_wordmatch.news_id = post.id ) AND ( search_wordlist.word_text = 'układ' OR search_wordlist.word_text = 'zamknięty' ) AND ( category != 13 AND category != 44 AND category != 45 AND category != 46 ) GROUP BY search_wordmatch.news_id ORDER BY count DESC, news_read DESC LIMIT 0,20
Przepisane zapytanie do innej postaci() :
SELECT SQL_CACHE count( search_wordmatch.news_id) AS kant ,post.id, post.short_story, post.title, post.autor, post.date, post.category, post.comm_num, post.alt_name, post.descr FROM `search_wordlist` LEFT JOIN search_wordmatch ON search_wordlist.id = search_wordmatch.word_id LEFT JOIN post ON post.id = search_wordmatch.news_id WHERE (`category` NOT IN(13,44,45,35,46,53,70)) AND ( search_wordlist.word_text = 'Need' OR search_wordlist.word_text = 'for' OR search_wordlist.word_text = 'speed' ) GROUP BY news_id ORDER BY kant DESC , news_id DESC LIMIT 0, 20
Indexy :
Tabela :
-- search_wordlist
http://scr.hu/1s02/bg4fo
-- search_wordmatch
http://scr.hu/1s02/1fxpz
-- post
http://scr.hu/1s02/tm1s9
EXPLAIN tego zapytania :
http://scr.hu/1s02/ljnq1
Jakie są wasze sugestie odnośnie optymalizacji takiego zapytania.