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
Użytkownik Bailiff edytował ten post 24.01.2013 16:31