Как я могу оптимизировать эти запросы? - PullRequest
0 голосов
/ 31 июля 2011

У меня есть 2 области, которые я знаю, это шлюхи, но я не знаю, как их улучшить.

Здесь показаны 2 рассматриваемых места

http://i.imgur.com/Kb5Bv.png

И соответствующие запросы

Область 1

$nresult = mysql_query("SELECT time
                       FROM log
                       ORDER BY time
                       LIMIT 1") or die(mysql_error);

$nr = mysql_fetch_assoc($nresult);

$aresult = mysql_query("SELECT *
                       FROM log") or die(mysql_error);

$an = mysql_num_rows($aresult);

$aresult = mysql_query("SELECT AVG(players)
                       FROM log") or die(mysql_error);

$ap = mysql_fetch_assoc($aresult);

$average = round($an/((time()-$nr['time'])/60/60), 2);

echo "<p class=\"tf2\"><span>{$an}</span> items since " . date("F j, Y", $nr['time']) . " at " . date("g:i a", $nr['time']) . ".<br /><span>" . $average . "</span> items received per hour (<span>" . round($average / $ap['AVG(players)'], 2) . "</span>/player/hour).<br />Showing <span>{$_SESSION['limit']}</span> items per page.</p>";

Область 2

if (!empty($_GET['s']) && !empty($_GET['t']) && !empty($_GET['m'])&& !empty($_GET['q'])) {

    if ($_GET['m'] != 'all') {

        $m = "AND method = {$_GET['m']}";
    }
    else {

        $m = '';
    }

    if ($_GET['q'] != 'all') {

        $q = "AND quality_id = {$_GET['q']}";
    }
    else {

        $q = '';
    }

    if ($_GET['s'] == ' ') {

        $s = '1=1';
    }
    else {

        $s = "{$_GET['t']} LIKE '%" . mysql_real_escape_string($_GET['s']) . "%'";
    }

    $num_result = mysql_query("SELECT *
                              FROM log
                              LEFT JOIN item_definition
                              on log.item = item_definition.item_definition_desc
                              LEFT JOIN method
                              on log.method = method.method_id
                              LEFT JOIN item
                              on item_definition.item_definition_id = item.item_id
                              LEFT JOIN server
                              on log.server = server.ip
                              LEFT JOIN quality
                              on log.quality = quality.quality_id
                              WHERE {$s}
                              {$m}
                              {$q}")
                              or die(mysql_error());
}
else {

    $num_result = mysql_query("SELECT *
                              FROM log") or die (mysql_error());
}

$total = mysql_num_rows($num_result);

echo "<center>" . $total . " results</center><br />";

Живая страницаздесь http://www.tf2items.711clan.net/

Как видите, загрузка занимает много времени.

Любые советы приветствуются.

Ответы [ 2 ]

4 голосов
/ 31 июля 2011

Я не вижу никаких команд LIMIT / OFFSET .. возможно, это даст вам толчок, если вы используете пейджинг в своем магазине.Или вы можете также попытаться где-то кешировать его (если поисковые фильтры не меняются) ..

0 голосов
/ 01 августа 2011

Замените второй запрос на SELECT COUNT(*) FROM log, так как вы получаете количество строк и игнорируете данные строк.

...