Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Poprawienie wydajności bazy
Gruchol
post
Post #1





Grupa: Zarejestrowani
Postów: 242
Pomógł: 0
Dołączył: 28.11.2014

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


Witam,
Na wstępie chciałbym powiedzieć że jestem zielony jeżeli chodzi o linuxa i prosiłbym o pisanie jak najbardziej zrozumiale.
Posiadam sporą bazę MySQL która strasznie przymula.
Uruchomiłem MySQLTuner który pokazał mi coś takiego :
http://wklej.org/id/1633653/
Szukałem tych linijek w my.cnf
tmp_table_size (> 16M)
max_heap_table_size (> 16M)
Jednak ich nie znalazłem.
Proszę o wyjaśnienie jak najprościej się da co mogę zrobić aby poprawić wydajność.
Pozdrawiam.

@edit
Dopisałem to do my.cnf
tmp_table_size = 16M
max_heap_table_size = 16M
I teraz ten komunikat na samym dole zniknął.
Co jeszcze mogę zrobić ?

Ten post edytował Gruchol 12.02.2015, 22:26:37
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Pyton_000
post
Post #2





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Zerknij to:
  1. SELECT
  2. g.name, g.honor, g.guild_id, u.user_name AS leader, COUNT(ug.guild_id) AS members
  3. FROM
  4. guilds g
  5. JOIN user_data u ON(u.user_id = g.leader_id)
  6. JOIN uesr_data ug USING(guild_id)
  7. ORDER BY
  8. honor DESC, members DESC
  9. GROUP BY ug.guild_id
  10. LIMIT :pos,15


A jak to nie zadziała to sprawdź czy masz indeksy na polach:
user_data.guild_id
guilds.guild_id
user_data.user_id
Go to the top of the page
+Quote Post
b4rt3kk
post
Post #3





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


Cytat(Pyton_000 @ 13.02.2015, 16:28:37 ) *
Zerknij to:
  1. SELECT
  2. g.name, g.honor, g.guild_id, u.user_name AS leader, COUNT(ug.guild_id) AS members
  3. FROM
  4. guilds g
  5. JOIN user_data u ON(u.user_id = g.leader_id)
  6. JOIN uesr_data ug USING(guild_id)
  7. ORDER BY
  8. honor DESC, members DESC
  9. GROUP BY ug.guild_id
  10. LIMIT :pos,15


A jak to nie zadziała to sprawdź czy masz indeksy na polach:
user_data.guild_id
guilds.guild_id
user_data.user_id


Wg mnie ten join, tylko po to, żeby zrobić counta jest tu niepotrzebny. Podzapytanie sobie lepiej poradzi.

  1. SELECT
  2. g.name, g.honor, g.guild_id, u.user_name AS leader, (SELECT COUNT(ug.guild_id) FROM user_data WHERE guild_id = guilds.guild_id) AS members
  3. FROM
  4. guilds g
  5. JOIN user_data u ON(u.user_id = g.leader_id)
  6. ORDER BY
  7. honor DESC, members DESC
  8. GROUP BY ug.guild_id
  9. LIMIT :pos,15


W ogóle to trochę bez sensu, żeby robić joina tylko po to, żeby zrobić counta. Już lepszym rozwiązaniem by było:

  1. SELECT
  2. g.name, g.honor, g.guild_id, u.user_name AS leader, ct AS members
  3. FROM
  4. guilds g
  5. JOIN user_data u ON(u.user_id = g.leader_id)
  6. JOIN (SELECT guild_id, COUNT(*) ct FROM user_data GROUP BY guild_id) gc ON gc.guild_id = g.guild_id
  7. ORDER BY
  8. honor DESC, members DESC
  9. GROUP BY ug.guild_id
  10. LIMIT :pos,15
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: 28.12.2025 - 22:38