我在 SO for postgres 上有一个类似的问题 - 现在 mysql 也有同样的问题。
我有两张桌子——
表A:1MM行,AsOfDate,Id,BId(表B的外键)
表 B:50k 行、Id、Flag、ValidFrom、ValidTo
表 A 包含 2011/01/01 和 2011/12/31 之间每天跨 100 个 BId 的多条记录。表 B 包含 100 个投标的多个非重叠(在 validfrom 和 validto 之间)记录。
连接的任务是返回在给定 AsOfDate 上为 BId 激活的标志。
select
a.AsOfDate, b.Flag
from
A a inner Join B b on
a.BId = b.Id and b.ValidFrom <= a.AsOfDate and b.ValidTo >= a.AsOfDate
where
a.AsOfDate >= 20110101 and a.AsOfDate <= 20111231
Run Code Online (Sandbox Code Playgroud)
在具有 64Gb 内存的非常高端的服务器 (+3Ghz) 上,此查询需要 3 多分钟。
+-------+-------------------------+
| Table | Create …
Run Code Online (Sandbox Code Playgroud)