我正在开发一个事件跟踪系统,该系统使用一些查找表以及主日志记录表。在我正在编写的报告中,可以选择一个对象来查看统计信息。该界面按重要性递减的顺序显示所有对象(即点击数)。
两个表的架构(稍微精简,但您明白了要点):
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`)
);
我遇到问题的查询如下。它适用于我的大约 100 个条目的表,但 EXPLAIN 有点让我担心。
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
返回:Using index; Using temporary; Using filesort
那么——我的架构和/或 MySQL 查询有什么问题吗?temporary
and filesort
?或者它是否可以使用 ORDER BY 进行优化?