我有什么看起来像一个简单的问题,但我挣扎。我有两个表格如下。比较缓慢的MySQL查询
表1有房事件和时间(秒) 表2有房访问时间(秒)和人
名称对于表1中的每一行我要输出的最后一个人进入房间,但只有当他们在最后5分钟进入房间
时间为两个表的表1(事件)
例如
|time |event|
|1294427839|poff |
|1294427939|pofn |
|1294428839|poff |
主索引表
例子(项)
|time |name|
|1294427829|tpeters |
|1294427929|jsmith |
|1294428829|abeach |
表1具有约5000行,表2约300000我目前使用下面的查询,但它正在采取分钟完成 。有人可能会提出我做错了什么。
select (SELECT name FROM entries entries WHERE entries.time > events.time-300 and entries.time < events.time order by entries.time desc limit 1) from events events
任何帮助将不胜感激。
增加了更多的细节:
ID SELECT_TYPE TABLE TYPE POSSIBLE_KEYS KEY KEY_LEN ROWS FILTERED EXTRA
1 PRIMARY events index PRIMARY 8 3 100 Using index
2 DEPENDENT SUBQUERY entries index PRIMARY PRIMARY 8 1 300 Using where
CREATE TABLE事件( time
INT(11)NOT NULL DEFAULT '0', PRIMARY KEY(time
) )ENGINE = InnoDB的默认字符集= UTF8 ROW_FORMAT = COMPACT ;
CREATE TABLE条目( time
INT(11)NOT NULL DEFAULT '0', PRIMARY KEY(time
) )ENGINE = InnoDB的默认字符集= UTF8 ROW_FORMAT = COMPACT;
显示'EXPLAIN'和两个表的结构进行了测试。 PS:使用'INNER JOIN'重写查询 – zerkms 2012-07-19 22:24:59