Usando o índice, usando temporário, usando o filesort - como consertar isso?

Eu estou trabalhando em um sistema de controle de eventos que usa um punhado de tabelas de pesquisa, bem como a tabela de registro principal. Em um relatório que estou escrevendo, um objeto pode ser selecionado para exibir estatísticas. A interface mostra todos os objetos em ordem decrescente de importância (ou seja, hits).

O esquema para as duas tabelas (ligeiramente reduzido, mas você obtém a essência):

CREATE TABLE IF NOT EXISTS `event_log` (
  `event_id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(5) DEFAULT NULL,
  `object_id` int(5) DEFAULT NULL,
  `event_date` datetime DEFAULT NULL,
  PRIMARY KEY (`event_id`),
  KEY `user_id` (`user_id`),
  KEY `object_id` (`object_id`)
);

CREATE TABLE IF NOT EXISTS `lookup_event_objects` (
  `object_id` int(11) NOT NULL AUTO_INCREMENT,
  `object_desc` varchar(255) NOT NULL,
  PRIMARY KEY (`object_id`)
);

A consulta com a qual estou tendo problemas está abaixo. Funciona bem com minha tabela de ~ 100 entradas, mas o EXPLAIN me preocupa um pouco.

    explain SELECT 
            el.object_id, 
            leo.object_desc, 
            COUNT(el.object_id) as count_rows
        FROM 
            event_log el 
            LEFT JOIN lookup_event_objects leo ON leo.object_id = el.object_id
        GROUP BY 
            el.object_id
        ORDER BY 
            count_rows DESC,
            leo.object_desc ASC

Retorna:Using index; Using temporary; Using filesort

Então - o que há de errado com o meu esquema e / ou consulta para o MySQL para recorrertemporary efilesort? Ou é tão otimizado quanto possível usando o ORDER BY?

questionAnswers(3)

yourAnswerToTheQuestion