不用说,我不精通SQL。现在我必须对一个表运行查询,如下所示:
id, tp_id, value_1, value_2, value_3, date
对于每个不同的tp_id,此表都有2个条目,它们具有不同的值。tp_id是一个外键,在下表中对其进行了索引:
id, external_id
我尝试检索数据如下:
获取不同的tp_id,其中值2 = 2,值1 = 1|2,value_3 = 1,并且date〈now - 1年。对于具有匹配tp_id的两个条目,这些条件必须都为真
我已经尝试了下面的查询,但是据我所知,SUM函数与JOIN语句的配对使得查询太慢:
SELECT t1.tp_id, t2.external_id
FROM table_1 t1
JOIN table_2 t2 ON t1.tp_id = t2.id
GROUP BY t1.tp_id
HAVING
SUM(
t1.value_2 = 2
AND t1.value_1 IN (1, 2)
AND t1.value_3 = 1
AND t1.date <= DATE_SUB(NOW(), INTERVAL 1 YEAR)
) = 2;
这两个表大约有250万行。
我想优化此查询或学习更好的方法来实现此目的,因此欢迎提供任何帮助。
编辑:看来运行这个查询将完全没有必要。因此,我将结束这个问题,谢谢您的回答
1条答案
按热度按时间ndh0cuux1#
如果我没理解错你的要求,像这样的东西可能会有帮助。
基本上,我做了3次性能更新:
1.我使用了嵌套查询,但是您也可以根据MySQL版本使用HAVING COUNT(tp_id)= 2