sql - 优化使用 between 子句的 SQL

标签 sql mysql query-optimization

考虑以下 2 个表格:

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 分钟是很奇怪的。有什么建议吗?

附:我无法更改数据库架构,但可以添加索引。但是,时间字段上的索引(具有 1 或 2 个字段)没有帮助。

最佳答案

你可能想尝试这样的事情

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 字段上有一个索引,那么这应该工作得很好。

关于sql - 优化使用 between 子句的 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/557425/

相关文章:

mysql - 优化我的 MySQL 查询

sql - 用人的身份证作为主键实用吗?

sql - 我可以使用LIMIT和OFFSET迭代地获取SELECT查询的结果吗?

javascript - 在将数据插入数据库之前验证数据

mysql - 解决: ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

sql - 如何优化包含多个 OR、AND、IN 语句的查询?

php - 如何使用内连接创建类别?

mysql - 如何优化sql查询

mysql - 从 SQL Management Studio 到 RPI MySql

sql - 查询内联与扁平化