PDA

View Full Version : بهترین روش برای لود صفحه های سنگین در php



sajadf7
دوشنبه 04 اردیبهشت 1396, 10:09 صبح
سلام و عرض ادب.

من 3 تا دیتابیس دارم تو mysql که حجم هر کدوم حدود 100000 رکورد هست.
یه صفحه هم دارم تو سایتم که از دوتا از این جدول ها query میگیره و چاپ میکنه . اما خیلی سنگین میشه لودش بعضی وقت ها هم اصلا لود نمیکنه.

من به این شکل پیاده کردم :
$result_l = mysql_query("SELECT * FROM sp_accounts WHERE `server` = '".$server."' AND `status` >= '0' AND `datecreated` < '".$dless ."'");// az hemaiat kharej shode
if (mysql_num_rows($result_l) > 0){
while($row_l = mysql_fetch_assoc($result_l))
{
$result_2 = mysql_query("SELECT * FROM statistic_troop WHERE `server` = '".$server."' AND `account` = '".$row_l['account']."'");
$q = mysql_num_rows($result_2);
if($q > 0){
$row_2 = mysql_fetch_assoc($result_2);
echo $row_l['account'].',,,'.$row_l['password'].',,,'.$row_l['ip'].',,,'.$row_l['port'].',,,'.$row_l['useragent'].',,,'.$row_l['screen'].',,,'.$row_2['xvill'].',,,'.$row_2['yvill'].',,,'.$row_l['tribe'].',,,'.$row_l['u1'].',,,'.$row_l['u2'].',,,'.$row_l['u3'].',,,'.$row_l['u4'].',,,'.$row_l['u5'].',,,'.$row_l['u6'].',,,'.$row_l['u7'].',,,'.$row_l['u8'].',,,'.$row_l['u9'].',,,'.$row_l['u11'].',,,'.$row_l['u12'].',,,'.$row_l['u13'].',,,'.$row_l['u14'].',,,'.$row_l['u15'].',,,'.$row_l['u16'].',,,'.$row_l['u17'].',,,'.$row_l['u18'].',,,'.$row_l['u19'].',,,'.$row_l['u21'].',,,'.$row_l['u22'].',,,'.$row_l['u23'].',,,'.$row_l['u24'].',,,'.$row_l['u25'].',,,'.$row_l['u26'].',,,'.$row_l['u27'].',,,'.$row_l['u28'].',,,'.$row_l['u29'].'<BR>';
}
}
}
راه دیگه ای هست که سرعت لود بیشتر بشه؟ این اصلا به درد نمیخوره . چون دو سه تا کاربر هممزان این پیج رو باز کنن دیگه کلا سایت اف میشه

plague
دوشنبه 04 اردیبهشت 1396, 11:03 صبح
اول اینکه ایندکس گزاری کن تیبلت رو تا زمان جستجو بیاد پایین
دوم اینکه کوئری دوم رو داخل حلقه نزار اینجوری تعداد کوئری ها میره بالا
account ها رو جمع کن بریز تو یک آرایه
بعد با 1 تک کوئری همه statistic_troop های اون اکانت ها رو بخون

sajadf7
دوشنبه 04 اردیبهشت 1396, 11:49 صبح
اول اینکه ایندکس گزاری کن تیبلت رو تا زمان جستجو بیاد پایین
دوم اینکه کوئری دوم رو داخل حلقه نزار اینجوری تعداد کوئری ها میره بالا
account ها رو جمع کن بریز تو یک آرایه
بعد با 1 تک کوئری همه statistic_troop های اون اکانت ها رو بخون

ایندکس گزاری تو یه جای دیگه خیلی زمان من رو میاره پایین. البته استثنا هست این مورد وگرنه ایندکس گزاری خیلی تو زمان کوئری ها اثر میزاره.

اما همون بیرون کشیدن کوئری دوم از حلقه و استفاده از ارایه مشکل من رو حل کرد . الان در کمتر از 1 ثانیه کوئری مورد نظر من اجرا میشه و نتیجه میده . ممنون