我有一個基於文本的遊戲網站(黑手黨遊戲)寫在舊的PHP/MySQL的風格。我對PHP/MYSQL知之甚少,但我正在學習它。所以,我有文件的其中一個通過AJAX重新加載每5秒問題,它包含一些MySQL查詢,檢查郵件,論壇,郵件,傳輸,攻擊等,並視檢查顯示警告用戶,如果他們得到任何新的消息,論壇的消息,傳輸,攻擊等我的網站現在正在使用VPS,如果我刷新率設置爲5秒它overlaods幾分鐘之內VPS所以我必須刷新時間設置爲20秒以上。我想知道是否有任何問題與查詢或任何建議優化查詢/ PHP代碼。下面是我的文件ajax.php的代碼,需要每5秒MySQL查詢超載VPS
<?php
include("funcs.php");
global $tab, $time, $id, $tru, $old;
$round=$_GET['tru'];
$tO=0;
$moFo='r'.$round.'_mafiosi';
$brd=$tab['board'];
$query="select msg,atk,ivt,transf from $moFo where id='$id'";
$result=mysql_query($query);
$ans=mysql_fetch_assoc($result);
foreach($ans as $key=>$value)
{
$tO+=$value;
}
$rtn='#'.$mafioMsg;
echo "$tO$rtn";
?>
#
及以下重新加載的jQuery的/ JavaScript的,我使用:
<script type="text/javascript" >
var onOff=false;
var replyText='';
window.onload=mainF;
function hideRedNotif()
{
document.getElementById('redNotif').style.display='none';
}
function mainF()
{
fetchNotif();
Updtr=window.setInterval(fetchNotif,25000);
}
function toggleNotif()
{
document.getElementById('redNotif').style.display='none';
if(onOff==false)
{
document.getElementById('parentReply').style.display='';
onOff=true;
}
else
{
document.getElementById('parentReply').style.display='none';
onOff=false;
}
}
function getAjxObject()
{
try {
var o=new XMLHttpRequest();
}
catch(exception)
{
var o=new ActiveXObject('Microsoft.XMLHTTP');
}
return o;
}
function fetchNotif()
{
roundN=document.getElementById('roundName').value;
var o=getAjxObject();
o.open('GET','notifAjx.php?openSes=in&&tru='+roundN,true);
o.onreadystatechange=execute;
o.send();
function execute()
{
if(o.readyState==4 && o.status==200)
{
var countF=0;
resp=o.responseText;
rsp=resp.split('#');
dom=document.getElementById('notifM');
dom.innerHTML=rsp[0];
//document.getElementById('chatRoller').innerHTML=rsp[1];
//if(rsp[1]!=replyText)
//{
//document.getElementById('redNotif').style.display='';
//replyText=rsp[1];
//}
}
}
}
function sendReply()
{
var o2=getAjxObject();
roundN=document.getElementById('roundName').value;
m=document.getElementById('replyText').value;
msg='&&reply=1&&msg='+m;
url='notifAjx.php?tru='+roundN+msg;
o2.open('GET',url,true);
document.getElementById('replyText').value='';
o2.onreadystatechange=execute;
o2.send();
function execute()
{
if(o2.readyState==4 && o2.status==200)
{
}
}
}
</script>
最新情況:謝謝大家爲了檢查我的問題,我採取了我的數據庫表的截圖,請檢查是否有幫助,或讓我知道我還應該提供什麼。
我歡迎任何建議/幫助。
感謝&問候 PRASHANT
如果查詢是很慢的,它可能是與你的數據庫表中的問題。你在桌上有索引嗎? – applechief 2012-03-14 11:47:27
您的ID字段是主鍵嗎? (請發佈您的MySQL表結構)另外,您能否在服務器上記錄緩慢的查詢並查看此查詢需要多長時間?根據問題的不同,改進表結構和將引擎轉換爲InnoDB可能會有所幫助。 – Ynhockey 2012-03-14 11:47:35
請使用以下詳細信息更新您的問題 - 全表結構(從SHOW CREATE TABLE $ moFo輸出),SHOW INDEXES FROM $ moFo和解釋查詢。 – nnichols 2012-03-14 11:52:17