Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Optymalizacaja zapytania
GameMaker
post
Post #1





Grupa: Zarejestrowani
Postów: 149
Pomógł: 2
Dołączył: 31.01.2010
Skąd: Konstancin-Jeziorna

Ostrzeżenie: (0%)
-----


Witajcie !

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):

  1. 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
  2.  


Przepisane zapytanie do innej postaci() :

  1. 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`
  2. LEFT JOIN search_wordmatch ON search_wordlist.id = search_wordmatch.word_id
  3. 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' )
  4. GROUP BY news_id
  5. ORDER BY kant DESC , news_id DESC
  6. 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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
bpskiba
post
Post #2





Grupa: Zarejestrowani
Postów: 340
Pomógł: 49
Dołączył: 3.07.2009
Skąd: Rzeszów

Ostrzeżenie: (0%)
-----


No tak od początku.....
Odpuszczę sobie analizę indeksów i strukturę tabel (widać kolega wie co się z tym robi (IMG:style_emoticons/default/closedeyes.gif) ).
Odpalenie OPTIMIZE też pewnie jest jasne.
Pytanie o konfigurację serwera... Z mojego doświadczenia wynika, że olbrzymia ilość serwerów działa na ustawieniach domyślnych i zmiana tych ustawień rozwiązuje masę problemów.

Odnośnie meritum, czyli zapytania tutaj też jest olbrzymie pole do działania gdyż z mojego doświadczenia wynika, że silnik mysql pierwsze wykonuje złączenia i potem dopiero sortuje i grupuje złączone tabele - co siłą rzeczy wymaga mieszania dużą ilością danych. Stosując inne złączenia lub podzapytania nieraz uzyskiwałem stukrotny wzrost wydajności w stosunku do zapytań napisanych książkowo (IMG:style_emoticons/default/smile.gif)

przykład:
- książkowo
  1. SELECT t1.a,t2.a
  2. FROM t1
  3. JOIN t2 ON t1.a=t2.a
  4. WHERE
  5. t1.c =2


alternatywa 1
  1. SELECT t1.a,t2.a
  2. FROM t1
  3. JOIN t2 ON t1.a=t2.a AND t1.c=2


alternatywa 2
  1. SELECT t3.a,t2.a
  2. FROM
  3. (SELECT a FROM t1 WHERE c=2) AS t3
  4. JOIN t2 ON t3.a=t2.a


Ten post edytował bpskiba 7.11.2013, 11:09:51
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 27.12.2025 - 23:50