0

私のMySQLサーバーを燃やすという非常に奇妙な問題が発生しています。私の観点からは (これは確かに間違っています)、クエリは非常に簡単です。

PBX イベントを格納するテーブルがあり、アプリケーションが再起動されるたびに、すべてのエージェントの最新のイベントを取得して状況を確認しようとします。

起動するたびに、サーバーは CPU の 99% まで上昇し、約 5 分間持続して自動的に解決します。

それはレコード数が10万件を超えているからだと思われます。

表は次のとおりです。

CREATE TABLE IF NOT EXISTS `eventos_centralita` (
  `idEvent` int(11) NOT NULL AUTO_INCREMENT,
  `fechaHora` datetime NOT NULL,
  `codAgente` varchar(8) DEFAULT NULL,
  `extension` varchar(20) DEFAULT NULL,
  `evento` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`idEvent`),
  KEY `codAgente` (`codAgente`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=105847 ;

そして、クエリは次のとおりです。

SELECT a.* FROM eventos_centralita a 
LEFT JOIN eventos_centralita b ON b.codAgente = a.codAgente AND b.fechaHora > a.fechaHora 
GROUP BY a.codAgente

日付で制限しようとしましたが、クエリで何も得られないためうまくいきません。これを回避するには、どうすればクエリを改善できますか?

4

1 に答える 1

1

以下をお試しください:

SELECT a.* FROM eventos_centralita a 
INNER JOIN 
(
    SELECT idEvent, MAX(fechaHora)
    FROM eventos_centralita  
    GROUP BY codAgente
) as b
ON a.idEvent = b.idEvent
于 2013-02-25T08:22:29.973 に答える