0

我遇到了一个非常奇怪的问题,它烧毁了我的 MySQL 服务器。从我的角度来看(这肯定是错误的),查询非常简单。

我有一个表来存储 PBX 事件,并且我尝试获取每个代理的最后一个事件,以便在我的应用程序重新启动或其他任何情况下查看他/她的情况。

每当我启动时,服务器会占用 99% 的 CPU 并持续大约 5 分钟自行解决。

似乎是因为记录的数量,超过了 100,000 条。

表格如下:

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 回答