Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Bailiff - zdjęcie

Bailiff

Rejestracja: 15.11.2010
Aktualnie: Nieaktywny
Poza forum Ostatnio: 24.01.2013 18:13
-----

Moje tematy

Optymalizacja zapytania SQLs

24.01.2013 16:31

Witam mam problem z zapytaniem w pliku ban_list.php

SELECT ba.*, se.gametype,se.timezone_fixx, aa.nickname FROM `".$config->db_prefix."_bans` AS ba
								LEFT JOIN `".$config->db_prefix."_serverinfo` AS se ON ba.server_ip=se.address
								LEFT JOIN `".$config->db_prefix."_amxadmins` AS aa ON (aa.steamid=ba.admin_nick OR aa.steamid=ba.admin_ip OR aa.steamid=ba.admin_id)
								WHERE ba.expired=0 GROUP BY ba.bid ORDER BY ban_created DESC LIMIT ".$min.",".$config->bans_per_page

przy dość sporej ilości banów wykonuje się ono ok. 20 sekund co jest czasem koszmarnie długim i strasznie obciąża serwer.

Jest sposób, by zoptymalizować to zapytanie ? myślę, że wystarczyło by np. ograniczyć ilość wyników z ba.* (coś w stylu
"SELECT * from `".$config->db_prefix."_bans` WHERE expired=0 GROUP BY bid ORDER BY ban_created DESC LIMIT ".$min.",".$config->bans_per_page""
i dopiero później połączyć to z reszta tylko do końca nie wiem jak)

Problem do zamkniecia. Zamienilem:

$query  = mysql_query("SELECT ba.*, se.gametype,se.timezone_fixx, aa.nickname FROM `".$config->db_prefix."_bans` AS ba
								LEFT JOIN `".$config->db_prefix."_serverinfo` AS se ON ba.server_ip=se.address
								LEFT JOIN `".$config->db_prefix."_amxadmins` AS aa ON (aa.steamid=ba.admin_nick OR aa.steamid=ba.admin_ip OR aa.steamid=ba.admin_id)
								WHERE ba.expired=0 GROUP BY ba.bid ORDER BY ban_created DESC LIMIT ".$min.",".$config->bans_per_page) or die(mysql_error());

na

$query  = mysql_query("SELECT ba.*, se.gametype,se.timezone_fixx, aa.nickname FROM (SELECT * FROM `".$config->db_prefix."_bans` WHERE expired=0 GROUP BY bid ORDER BY ban_created DESC LIMIT ".$min.",".$config->bans_per_page." ) AS ba
								LEFT JOIN `".$config->db_prefix."_serverinfo` AS se ON ba.server_ip=se.address
								LEFT JOIN `".$config->db_prefix."_amxadmins` AS aa ON (aa.steamid=ba.admin_nick OR aa.steamid=ba.admin_ip OR aa.steamid=ba.admin_id)
								") or die(mysql_error());


I strona ładuje się w ułamku sekundy ;)