小编典典

优化使用between子句的SQL

sql

考虑以下两个表:

Table A:
id
event_time

Table B
id
start_time
end_time

表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

我正在使用MySQL,但无法优化此查询。表A中有约980条记录,表B中有130.000条记录,这是永远的事。我知道必须执行980个查询,但是在功能强大的计算机上花费超过15分钟的时间却很奇怪。有什么建议?

PS我不能更改数据库架构,但是可以添加索引。但是,时间字段上的索引(具有1或2个字段)无济于事。


阅读 201

收藏
2021-03-23

共1个答案

小编典典

您可能想尝试这样的事情

Select A.ID,
(SELECT B.ID FROM B
WHERE A.EventTime BETWEEN B.start_time AND B.end_time LIMIT 1) AS B_ID
FROM A

如果您在B的Start_Time,End_Time字段上有一个索引,那么这应该可以很好地工作。

2021-03-23