php - MySQL 查询变慢
问题描述
我们通过专用套接字 (9030) 在计时器上将以下 select 语句作为 XML 消息发送。该查询最初运行良好,但由于我们一直在并行运行更多的 PHP 文件,因此下面的消息速度变慢了,它现在在它应该发送大约 30 秒后发送。这可以通过删除数据库中的数据来纠正,但我希望这里可以提出另一种解决方案。
private function doEventStop() {
$sql = "update SessionLogs
set EventStatusID = 0
where resultID > 0
";
db_query($sql);
$timestamp = time();
$sentCnt = 0;
foreach ($this->myusers as $user) {
$sql2 = "SELECT SessionLogs.sessionid, SessionLogs.eventid, ResultPackage.Winner,
EventStatus.EventStatus, GameStatus.GameStatus,
ResultPackage.T3Way,
ResultPackage.CorrectScore,
ResultPackage.HighestScoringPeriod,
ResultPackage.Overtime,
ResultPackage.MHPN2P5,
ResultPackage.MHPN1P5,
ResultPackage.MHP1P5,
ResultPackage.MHP2P5,
ResultPackage.MAPN2P5,
ResultPackage.MAPN1P5,
ResultPackage.MAP1P5,
ResultPackage.MAP2P5,
ResultPackage.MOTG1P5,
ResultPackage.MOTG2P5,
ResultPackage.MOTG3P5,
ResultPackage.MOTG4P5,
ResultPackage.MOTG5P5,
ResultPackage.MOTG6P5,
ResultPackage.MUTG1P5,
ResultPackage.MUTG2P5,
ResultPackage.MUTG3P5,
ResultPackage.MUTG4P5,
ResultPackage.MUTG5P5,
ResultPackage.MUTG6P5,
ResultPackage.MHFPN0P5,
ResultPackage.MHFP0P5,
ResultPackage.MAFPN0P5,
ResultPackage.MAFP0P5,
ResultPackage.MO1P5,
ResultPackage.MU1P5
FROM SessionLogs
LEFT JOIN ResultPackage ON SessionLogs.resultid = ResultPackage.ResultID and ResultPackage.PackageID = '{$user->packageid}'
LEFT JOIN EventStatus ON SessionLogs.eventstatusid = EventStatus.EventStatusID
LEFT JOIN BetStatus ON SessionLogs.GameStatusID= GameStatus.GameStatusID
LEFT JOIN EventInfo ON SessionLogs.slotid = EventInfo.SlotID and EventInfo.PackageID = '{$user->packageid}'
Order by eventstart desc
LIMIT 1";
$res = db_fetch($sql2);
$returnXML = '<EventStop timestamp="'.$timestamp.'">';
foreach ($res as $eventInfo) {
$returnXML .= '<Event sessionid="'.$eventInfo['sessionid'].'" eventid="'.$eventInfo['eventid'].'" Winner="'.$eventInfo['Winner'].'"
EventStatus="'.$eventInfo['EventStatus'].'" BetStatus="'.$eventInfo['GameStatus'].'" T3Way="'.$eventInfo['T3Way'].'"
CorrectScore="'.$eventInfo['CorrectScore'].'"
HighestScoringPeriod="'.$eventInfo['HighestScoringPeriod'].'"
Overtime="'.$eventInfo['Overtime'].'"
MHPN2P5="'.$eventInfo['MHPN2P5'].'"
MHPN1P5="'.$eventInfo['MHPN1P5'].'"
MHP1P5="'.$eventInfo['MHP1P5'].'"
MHP2P5="'.$eventInfo['MHP2P5'].'"
MAPN2P5="'.$eventInfo['MAPN2P5'].'"
MAPN1P5="'.$eventInfo['MAPN1P5'].'"
MAP1P5="'.$eventInfo['MAP1P5'].'"
MAP2P5="'.$eventInfo['MAP2P5'].'"
MOTG1P5="'.$eventInfo['MOTG1P5'].'"
MOTG2P5="'.$eventInfo['MOTG2P5'].'"
MOTG3P5="'.$eventInfo['MOTG3P5'].'"
MOTG4P5="'.$eventInfo['MOTG4P5'].'"
MOTG5P5="'.$eventInfo['MOTG5P5'].'"
MOTG6P5="'.$eventInfo['MOTG6P5'].'"
MUTG1P5="'.$eventInfo['MUTG1P5'].'"
MUTG2P5="'.$eventInfo['MUTG2P5'].'"
MUTG3P5="'.$eventInfo['MUTG3P5'].'"
MUTG4P5="'.$eventInfo['MUTG4P5'].'"
MUTG5P5="'.$eventInfo['MUTG5P5'].'"
MUTG6P5="'.$eventInfo['MUTG6P5'].'"
MHFPN0P5="'.$eventInfo['MHFPN0P5'].'"
MHFP0P5="'.$eventInfo['MHFP0P5'].'"
MAFPN0P5="'.$eventInfo['MAFPN0P5'].'"
MAFP0P5="'.$eventInfo['MAFP0P5'].'"
MO1P5="'.$eventInfo['MO1P5'].'"
MU1P5="'.$eventInfo['MU1P5'].'"
/>';
}
$returnXML .= "</EventStop>";
$this->send($user, $returnXML);
$this->doLogMessage($user, 6);
$sentCnt++;
}
echo "Sent EventStop message to {$sentCnt} users.\n";
}
public function __destruct()
解决方案
推荐阅读
- vb.net - 如何将位图转换为 mat VB.net
- python - 如何让 conda 命令匹配 Vscode 的集成终端和普通终端中的行为?
- hibernate - 日期在使用 JPA 的 sql server 中显示为日期时间
- json - 如何使用 JSON_MODIFY 将 int json 值转换为单长数组?
- javascript - TypeError:实际测试未定义时,无法读取未定义的属性“url”
- javascript - 编辑 mongoDB 项目未更新但未收到错误
- c# - 如何计算每个应用程序 ID 的传输时间?
- python - 如何在解析时解决这个 Unexpected EOF 错误
- azure - Azure 和 Intranet 站点。IE 可以,但 Chrome/FF 不行
- ios - 如何以编程方式强制浮动键盘?