MySQL - Cuál puede ser la causa del aumento de CPU?

   
Vista:

Cuál puede ser la causa del aumento de CPU?

Publicado por LDP (1 intervención) el 24/02/2008 11:22:32
El sistema de votación de mi web provoca el aumento de consumo de CPU de mi hosting.

El problema viene cuando intento mostrar la lista ordenada por votos, mientras que si está ordenada por nombre o fecha no hay problema.

Aquí dejo una captura de la BD:
[IMG]http://img87.imageshack.us/img87/3587/votosty9.jpg[/IMG]

[B]rate_id, rate_table y rate_itemid[/B] definen el item que se votó (rate_id es el ID en esta tabla, rate_table es la tabla a la que pertenece el item y rate_itemid el ID que tiene en la tabla a la que pertenece).
[B]rate_rating[/B] es el total de la suma de los votos (se vota del 1 al 10)
[B]rate_votes[/B] es el total de votos (en este caso 2 personas han votado este item)
[B]rate_voters[/B] son los ID de los usuarios que han votado (para que sólo puedan votar 1 vez)

No sé porque da problemas cuando lo único que tiene que hacer es dividir el campo "rate_rating" entre "rate_votes" y ordenarlo descendente.

Alguna idea?

EDITO: El CMS es e107. Si no me equivoco, este es el código que maneja los votos:

[CODE] function getrating($table, $id, $userid=FALSE) {
//userid : boolean, get rating for a single user, or get general total rating of the item

$table = preg_replace('/W/', '', $table);
$id = intval($id);

$sql = new db;
if (!$sql->db_Select("rate", "*", "rate_table = '{$table}' AND rate_itemid = '{$id}' ")) {
return FALSE;
} else {
$rowgr = $sql->db_Fetch();
if($userid==TRUE){
$rating = "";
$rateusers = explode(".", $rowgr['rate_voters']);
for($i=0;$i<count($rateusers);$i++){
if(strpos($rateusers[$i], chr(1))){
$rateuserinfo[$i] = explode(chr(1), $rateusers[$i]);
if($userid == $rateuserinfo[$i][0]){
$rating[0] = 0; //number of votes, not relevant in users rating
$rating[1] = $rateuserinfo[$i][1]; //the rating by this user
$rating[2] = 0; //no remainder is present, because we have a single users rating
break;
}
}else{
$rating[0] = 0; //number of votes, not relevant in users rating
$rating[1] = 0; //the rating by this user
$rating[2] = 0; //no remainder is present, because we have a single users rating
}
}
}else{
$rating[0] = $rowgr['rate_votes']; // $rating[0] == number of votes
$tmp = $rowgr['rate_rating'] / $rowgr['rate_votes'];
$tmp = (strpos($tmp,",")) ? explode(",", $tmp) : explode(".", $tmp);
$rating[1] = $tmp[0];
if(isset($tmp[1])){
$rating[2] = substr($tmp[1], 0, 1);
}else{
$rating[2] = "0";
}
}

return $rating;
}
}[/CODE]
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder