当前位置: 首页 > 面试题库 >

使用索引,使用临时文件,使用文件排序-如何解决此问题?

东方富
2023-03-14
问题内容

我正在开发一个事件跟踪系统,该系统使用少数查找表以及主日志记录表。在我撰写的报告中,可以选择一个对象来查看统计信息。界面按重要性递减的顺序显示所有对象(即命中)。

两个表的架构(略有减少,但您能理解以下要点):

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来依傍temporaryfilesort?还是使用ORDER BY获得的优化?


问题答案:

好吧,文档给出了出现“使用临时”时的确切原因:

可以在以下条件下创建临时表:

如果有一个ORDER BY子句和另一个GROUP BY子句,或者ORDER BY或GROUP
BY包含联接队列中第一个表以外的表中的列,则会创建一个临时表。

DISTINCT与ORDER BY结合使用可能需要一个临时表。

如果使用SQL_SMALL_RESULT选项,则MySQL使用内存中临时表,除非查询还包含需要磁盘存储的元素(稍后描述)。

快速扫描显示您患有#1。

而这个博客从2009年说:“使用文件排序”指的是那种不能用指数来进行。由于您要按计算字段排序,所以这也将是正确的。

因此,这就是“错误”。



 类似资料:
  • 问题内容: 我 捕捉图像 ,然后 存储到SD卡 ,并 在列表中出现 ,但在这里我需要一个小的变化, 还是我老在上面,最新的在底部 ,所以现在 我要显示在顶部的最新图片 的基础上,使用datetimestamp作为文件名的一部分。 UploadActivity.java 代码:- 注意: 我将图像存储到SD卡时使用的是日期/时间戳。 所以最终看起来像这样: 和 仍文件中列举 如下格式,如下图所示:

  • 我正在使用Apache Camel处理SFTP目录中的文件。该目录将同时接收多个文件。如何控制camel按顺序使用文件?例如,目录my\u directory将同时接收文件file1、file2、file3、file4。我希望camel按照file1-file2-file3-file4的顺序消费。

  • qt 使用opencv,添加外部库,一直找不到头文件,应该如何解决 下面是.pro 文件以及.pri 文件 下面是报错信息 尝试过更改INCLUDPATH 改为 -I………………

  • 问题内容: 我正在创建一个简单的项目,使我可以使用gwt上传和下载文件。我在下载服务器上的文件时遇到了麻烦。 对于文件上传,我使用了http://code.google.com/p/gwtupload/并按照那里的说明进行操作。我的文件存储在网站容器外部的服务器上(在硬盘上), 现在,当涉及到文件下载时,我希望用户按下下载按钮,并且当前选择的任何项目都将下载。我真的不知道该怎么做 我知道我需要下载

  • 问题内容: 我在这里遇到的一个问题可能是一个我忽略的非常简单的答案……如何使用NSURL检索本地文件?我在这里: 但是,在成功构建之后,它将挂在var urlpath上。我到处搜寻,并在这里和其他地方尝试了一些建议,但无济于事。请帮忙?:( 问题答案: 您正在尝试从文件系统而不是从Web加载文件。 对于创建,您需要使用fileURLWithPath:类方法。 更改您的方法,例如: 迅捷2 迅捷3

  • 问题内容: 如果文件是A ,我可以解压缩文件,如果文件类型是I,则可以解压缩文件。我如何使用python 2.7进行此工作? 问题答案: 试试这个包: