Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Mysql]Group by optymalizacja
Crisu
post
Post #1





Grupa: Zarejestrowani
Postów: 59
Pomógł: 0
Dołączył: 11.08.2006

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


Witam!
Mamy taki przypadek. Jest jedna wieksza tabela , założmy 2 mln rekordów do której dołączamy kilka mniejszych po 200-400 każda.
Czyli coś w stylu :

  1. SELECT st.pole2,bt.pole1,bt.pole2, st.pole1,MAX(bt.pole3)
  2. FROM big_table bt
  3. LEFT JOIN small_table st ON (st.id_small=bt.id_small)
  4. WHERE bt.pole2='T' AND bt.pole1=21
  5. GROUP BY st.pole2


Wszystko fajnei działą gdy duża tabela ma ok 100k rekordów. Gdy wchodzimy na większa ilość krotek , wszystko diametralnie zwalnia.
Czy ktoś ma może pomysł jak takie zapytanko zooptymalizować ? Indeksy są założone na PK i FK , i testowałem już kilka wariantów z indeksami na innych polach (m.in na tym po którym grupuje). Efekt zerowy.
Silnik InnoDB.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
vokiel
post
Post #2





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

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


Jeśli nie używasz transakcji na poziomie bazy to zmień na MyISAM - jesz szybsze.

Załóż klucze na pola w warunku WHERE, dodatkowo możesz zobaczyć jak wygląda zapytanie wg bazy dodając DESCRIBE przed zapytaniem.
Poza tym bt.pole2='T', może da się warunek sprowadzić do liczby, czyli zamiast I,T,P zrobić 1,2,3, klucze na wartościach liczbowych są szybsze
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: 14.10.2025 - 05:47