我有两个表,想要在它们之间进行联接并总结一些列。连接标准应该是表A的时间在表B的时间的1到5分钟之内。

因此B.time
这是代码,我在两个datetime列上都有索引(btree)。但它似乎运行SUPER SLOW。有什么我可以做的不同吗?

SELECT
    a.Name,
    SUM(b.UnitsSold),
    SUM(b.Revenue),
    SUM(c.UnitsSold),
    SUM(c.Revenue)
FROM cars a
INNER JOIN sales b
ON
    b.Datet <= a.Datet
    and a.Datet <= DATE_ADD(b.Datet, INTERVAL 1 MINUTE)
INNER JOIN sales c
ON
    c.Datet <= a.Datet
    and a.Datet <= DATE_ADD(c.Datet, INTERVAL 5 MINUTE)
GROUP BY
    a.name

最佳答案

如前所述,如果没有样本数据,期望的结果以及所需逻辑的解释,很难提供帮助,但是您可以尝试以下解决方案:

在销售表中创建两个新列(Datet_b和Datet_c),并在插入/更新时运行DATE_ADD函数以填充它们。

为这两列添加索引,然后运行上面没有DATE_ADD函数的查询。

运行查询,性能应该会好一点

09-17 06:20