首页 > 解决方案 > 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()

标签: phpmysqlamazon-web-serviceswebsocket

解决方案


推荐阅读