您好我有一个简单的问题:从日期> = max(date) - 7的表中选择数据。
有很多方法可以做到:(假设表格为A) 例如:右外连接(从A中选择最大值(日期))在A.date上的B> = B.date -7
但是如果A表非常大,我不想在这里进行大量的连接,查询需要很长时间。还有其他办法吗?
答案 0 :(得分:1)
不要担心join
。基本上,您需要扫描表格两次,一次获得最大日期,一次获得原始行。
join
本身是一行,加入单行的开销很小。
如果您知道每天只有一条记录,则可以使用limit
。但情况似乎并非如此。
答案 1 :(得分:0)
如果您真的关心大型表的性能并且这是一个经常运行的查询,我会将最大日期添加到审计表中,该表会在每次加载时更新。然后在主表中的日期上进行分区,以便审计表中的BETWEEN max(date)和max(date) - 7是有效的。
答案 2 :(得分:0)
我不明白为什么你在这种情况下使用join
。为什么不使用子查询?
Select * from A where A.date >= (select max(date) from A);
我假设查询计划首先评估subwuery,然后使用该结果过滤A.另外,如果您为此表创建一个按日期排序的投影,这应该有助于提高性能。