我有一个看似简单的问题,但正在苦苦挣扎。我有 2 张桌子,如下所示。
表 1 有房间事件和时间(秒) 表 2 有房间访问时间(秒)和人名
对于表 1 中的每一行,我想输出最后一个进入房间的人,但前提是他们在最后 5 分钟内进入房间
time 是两个表的主索引
表 1 示例(事件)
|time |event|
|1294427839|poff |
|1294427939|pofn |
|1294428839|poff |
表 2 示例(条目)
|time |name|
|1294427829|tpeters |
|1294427929|jsmith |
|1294428829|abeach |
表 1 有大约 5,000 行,表 2 大约有 300,000 我目前正在使用以下查询,但需要几分钟才能完成。有人可以告诉我我做错了什么。
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 events (
time
int(11) NOT NULL DEFAULT '0', PRIMARY KEY ( time
)) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;
CREATE TABLE 条目(
time
int(11) NOT NULL DEFAULT '0', PRIMARY KEY ( time
) )ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;