SQL 查询 - 匹配日期时间与匹配整数

标签 sql sql-server performance

我的数据库中有一堆数据,我想过滤掉存储时间超过一周的数据。我正在使用 SQLServer,我发现我可以使用“DATEDIFF”函数。

目前它运行良好且速度很快,但目前我没有很多记录,因此一切都运行得很顺利。

经过一些在线研究后,我发现数据库中整数的比较比字符串的比较更快,我假设在这一点上,日期时间的比较(使用给定的函数)在主要规模上甚至更慢。

假设我的数据库表内容如下所示: enter image description here

目前我会像这样过滤掉一周前的记录:

SELECT * FROM onlineMainTable WHERE DATEDIFF(wk, Date, GETDATE()) > 1

我假设如果表中有上千行,这个查询会很慢。

status 列表示计算状态,我想知道如果我要查找特定状态而不是匹配日期时间,我是否会加快该过程,以便将该状态设置为代表“旧记录”的状态' 我需要在选择它们之前更新这些行,它看起来像这样:

UPDATE table SET Status = -1 WHERE NOT Status = -1 AND DATEDIFF(wk, Date, GETDATE()) > 1;
SELECT * FROM table WHERE Status = -1;

我以“-1”为例。

所以显然我可能是错的,但我认为在这种情况下更新会足够快,因为不会有那么多记录要更新,因为较旧的记录已经更新了其状态。选择也会更快,因为我将匹配整数而不是日期时间。

我的(可能的)解决方案的缺点是我每次获取数据时都会查询两次,即使可能不需要它(如果每一行都比 1 周新)。

归结为:我应该比较日期时间还是应该根据该日期时间更新整数列,然后使用这些整数的比较进行选择?

如果有不同/更好的方法,我会洗耳恭听。

上下文 我正在为报价请求制作一个网络应用程序。请求应在一周后过期,因为届时它们将无效。我需要同时显示有效请求和过期请求(以便客户有一个概览)。所有这些请求都存储在数据库表中。

最佳答案

索引是旨在提高选择查询性能的对象,缺点是它们会减慢插入删除和更新操作的速度,因此必须在必要时使用它们。通常 DBMS 提供工具来解释查询执行计划。

也许您只需要在 Date 列上添加一个索引:

create index "index_name" on onlineMainTable(Date)

查询可以是

 SELECT * FROM onlineMainTable WHERE Date > DATEADD(week,-1,GETDATE());

关于SQL 查询 - 匹配日期时间与匹配整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45434491/

相关文章:

mysql - 二维 Excel 表转为 CSV 以进行 SQL 插入

java - 如何对多对多关系执行存在查询

sql-server - 没有 FROM 的 SELECT 语句有什么用?

php - Linux 服务器上的 mssql_connect PHP 5.3

sql-server - 如何设置我的部署选项来编写 Visual Studio 2010 数据库项目的增量发布脚本?

Python 大型多列表高效查询

sql - Postgres 函数创建但不执行

sql - 比较 SQL 中的图像

c - 查找给定整数的所有精确除数的算法

java - 内存高效的多值映射