Citat:
0,2 sekunder skulle inte vara så farligt om det är hög belastning, men.. Är belastningen mer eller mindre obefintlig så kommer det bli riktigt otrevligt när det drar på lite sen :/
|
Jag har ca 4000 unika besökare per dygn så lite trafik har den ju...
Citat:
Kan ha gjort detta för MySQLs RAND är notorisk långsam med större dataset.
|
Men det måste väl ändå vara snabbare än att plocka in 43 000 rader i en array och plocka ur en??
Jag har inte tänkt så himla mycket på optimering förut utan mest kodat med sunt förnuft och det har funkat bra hittills
Men nu när jag grävt lite mer i det så är det ju uppenbarligen så att CPUn i servern idlar medans den väntar på sql anropet ska returnera resultatet (vilket ju är helt logiskt och rimligt) så det jag optimerat i sql anropen verkar inte ha påverkat CPU användningen alls, snarare verkar det ha haft omvänt resultat.
Tex verkar MySql ha stora problem med group by
Följande fråga tog ca 10 sekunder att exekvera:
select
$tb_comments.id as id,
$tb_comments.user_id as user_id,
$tb_comments.subject as subject,
$tb_comments.comment as comment,
$tb_comments.author_id as author_id,
count($tb_comment_views.comment_id) as comment_views,
$tb_users.username as author_name,
$tb_users.image_status as image_status
from
$tb_comments
left join
$tb_comment_threads
on
$tb_comments.id = $tb_comment_threads.comment_id
left join
$tb_comment_views
on
$tb_comments.id = $tb_comment_views.comment_id
left join
$tb_users
on
$tb_comments.author_id = $tb_users.id
where
$tb_comments.pid = 0 ";
if ( $poster_id )
{
$sql .= " and $tb_comments.author_id = $poster_id ";
}
$sql .= " and
$tb_comments.status = 'approved'
group by
$tb_comments.id
order by
$tb_comment_threads.updated desc
limit
$csr, $comments_per_page
när jag ändrade den till:
select
$tb_comments.id as id,
$tb_comments.user_id as user_id,
$tb_comments.subject as subject,
$tb_comments.comment as comment,
$tb_comments.author_id as author_id,
$tb_users.username as author_name,
$tb_users.image_status as image_status
from
$tb_comments
left join
$tb_comment_threads
on
$tb_comments.id = $tb_comment_threads.comment_id
left join
$tb_users
on
$tb_comments.author_id = $tb_users.id
where
$tb_comments.pid = 0 ";
if ( $poster_id )
{
$sql .= " and $tb_comments.author_id = $poster_id ";
}
$sql .= " and
$tb_comments.status = 'approved'
group by
$tb_comments.id
order by
$tb_comment_threads.updated desc
limit
$csr, $comments_per_page
så tar den ca 1 sekund att exekvera.
Efter ändringen fick jag köra count() separat så det blev ju ett anrop till samt hantering av detta vilket ju ökar belastningen på CPUn litegrann. Laddtiden på sidan blev dock ca 10 sekunder snabbare vilket ju är bra för besökaren men inte för sänkningen av CPU använningen.
Nu kanske man sväljer kameler och silar mygg men, hur krävande är det egentligen och hålla på att ersätt alla dess fördefinerade variablerna tex $tb_comments, det borde ju ta ett par klockcykler för varje, eller?