考虑以下2个表:
Table A:
id
event_time
Table B
id
start_time
end_time
Run Code Online (Sandbox Code Playgroud)
表A中的每个记录都映射到表B中的恰好1个记录.这意味着表B没有重叠的句点.表A中的许多记录可以映射到表B中的相同记录.
我需要一个返回所有A.id,B.id对的查询.就像是:
SELECT A.id, B.id
FROM A, B
WHERE A.event_time BETWEEN B.start_time AND B.end_time
Run Code Online (Sandbox Code Playgroud)
我正在使用MySQL,我无法优化此查询.表A中有约980条记录,表B中有130.000条,这需要永远.我知道这必须执行980个查询,但是在一台强壮的机器上花费超过15分钟是很奇怪的.有什么建议?
PS我无法更改数据库架构,但我可以添加索引.但是,时间字段上的索引(带有1或2个字段)无济于事.
鉴于下表:
Table events
id
start_time
end_time
Run Code Online (Sandbox Code Playgroud)
有没有办法快速搜索常量?
例如
SELECT *
FROM events
WHERE start_time<='2009-02-18 16:27:12'
AND end_time>='2009-02-18 16:27:12'
Run Code Online (Sandbox Code Playgroud)
我正在使用MySQL.在任一字段上都有索引仍然需要检查范围.此外,两个字段的索引都没有区别(只使用第一个字段).
我可以向表中添加字段/索引(因此添加包含两个字段的信息的索引构造字段是可以接受的).
PS需要这个来自这个问题:优化使用between子句的SQL