我在我的数据库中有一堆数据,我想过滤掉超过一周的存储数据。我使用的是SQLServer,我发现我可以使用'DATEDIFF
'函数。SQL查询 - 匹配日期时间与匹配整数
目前,它的工作非常快,但目前我没有很多记录,因此任何事情都可以顺利进行。
经过一些在线研究后,我发现数据库中整数的比较比字符串的比较快,我现在假设日期时间(使用给定函数)的比较在主要规模上甚至更慢。
目前,我会过滤掉旧的像一个星期,像这样记录:
SELECT * FROM onlineMainTable WHERE DATEDIFF(wk, Date, GETDATE()) > 1
我认为这个查询将是相当如果桌子上有一千行,就会变慢。
状态栏代表一个计算状态,我想知道如果我要寻找一个特定的状态而不是匹配的日期时间,我是否会加快过程,对于我来说,为了将该状态设置为代表'旧记录'我需要更新这些行之前,我选择它们,它会看起来像这样:
UPDATE table SET Status = -1 WHERE NOT Status = -1 AND DATEDIFF(wk, Date, GETDATE()) > 1;
SELECT * FROM table WHERE Status = -1;
我用'-1'为例。
所以很明显我可能是错的,但我认为更新在这种情况下将会足够快,因为不会有那么多记录要更新,因为较旧的更新已经与它的状态。选择会更快,因为我会匹配整数而不是日期。
我的(可能的)解决方案的缺点是每次获取数据时我都会查询两次,即使可能不需要(如果每行都比1周更新)。
归结为这样:我应该比较日期时间还是应该更新基于该日期时间的整数列,然后选择使用这些整数的比较?
如果有一个不同的/更好的方式做到这一点我是耳朵。
上下文 我正在为引用请求做一个webapp。请求应在一周后过期,因为它们在那时不会有效。我需要显示有效的请求和过期的请求(所以消费者有一个概述)。所有这些请求都存储在数据库表中。
你能给你的意思是“超过一周”什么例子?您的代码与保留过去7天的数据不同。 –
@GordonLinoff上面写的查询获取超过一周的行,所有数据都保留为 – Dubb
。 。您的逻辑保留最近一整周以及此后的任何日期的所有行。目前还不清楚这是否意味着“存储了超过一周的时间”。这不是我如何解释你的描述。 –