我有成千上万的行数据,我想做下面的代码所示的事情。
(SELECT Username, AddTime
FROM Table1
WHERE Type = 3 AND AddTime >= '2019-07-11 13:30:00' AND Username = 'Test1'
LIMIT 1)
UNION ALL
(SELECT Username, AddTime
FROM Table1
WHERE Type = 3 AND AddTime >= '2019-07-11 13:40:00' AND Username = 'Test2'
LIMIT 1);
我想要一个建议,是使用UNION ALL
来使用上面显示的一个大查询,还是应该使用下面所示的多个小查询数千次呢?
如果我使用UNION ALL,那么在一个查询中将使用成千上万的UNION ALL。
SELECT Username, AddTime
FROM Table1
WHERE Type = 3 AND AddTime >= '2019-07-11 13:30:00' AND Username = 'Test1'
LIMIT 1
注意:
答案 0 :(得分:0)
您可以尝试这样的操作:
SELECT tbl1.Username, tbl1.AddTime, min(tbl2.AddTime)
FROM Table1 tbl1
INNER JOIN Table1 tbl2
ON tbl1.userName = tbl2.userName AND tbl1.type = tbl2.type and tbl2.addTime >= tbl1.addTime
WHERE type = 3
AND tbl1.addTime >= '2019-07-11 13:30:00'
AND userName in ('Test1', 'Test2')
AND tbl1.addTime <= DATE_ADD(tbl1.addTime, INTERVAL 5 MINUTE) --optional but prob want to do something like this to limit result set
GROUP by tbl1.Username, tbl1.AddTime
请注意,我不在工作机器上,因此尚未进行测试。 同样,鉴于您提到的记录数量,您可能对此表具有一些索引以加快查询速度。最好的方法可能是在addTime,type和userName上包含覆盖索引,但要使用它来优化查询。