1

我正在处理一个数据库,并且可以看到该表设置有多个列(日、月、年),而不是一个日期列。我想我应该将其转换为一个,但想检查它是否有很多意义。

我正在重写网站,所以无论如何我都会更新处理它的代码,但我很好奇这样有没有好处?

它唯一用于比较数据,其中所有列都进行比较,我认为整数比较可能比日期比较快。

4

4 回答 4

4

将它们合并到单个列 - 单个日期上的索引将比 3 个整数上的复合索引更紧凑(因此更有效)。您还将受益于 DBMS 提供的类型安全和与日期相关的功能。

即使您想查询一年中的某月或某月的某天(根据您的描述,这似乎并非如此),也无需将它们分开 - 只需创建适当的计算列并将它们intex 即可。

于 2013-05-20T00:34:14.160 回答
3

通常,单个日期字段是理想的,因为它允许更有效的比较、低级别的有效性检查以及数据库端的日期数学函数。

分离组件的唯一显着优势是经常需要一天或一个月的首次搜索(比较)。也许是“这一天发生的其他事件”之类的事情。或每月预算应用程序或其他东西。

(即使那样,适当的日期字段也可能通过适当的索引有效地工作。)

于 2013-05-20T01:10:51.787 回答
3

日期列对时间数据有意义,因为它适合目的。

但是,如果您有一个特定的用例,您更经常比较每月数据而不是使用完整日期,那么有一点优势 - 正如您所提到的 - int 列更易于存储索引页面和更快的匹配。

缺点是使用 3 个独立的 int 列,日期验证几乎是前端事务,无需在 SQL Server 端使用额外的编码。

于 2013-05-20T00:15:44.230 回答
2

是的,我建议您将 3 列替换为包含朱利安日期的单列,该日期是浮点数。点之前的部分给出一天,点之后的部分给出一天中的时间。计算将很容易,您还可以轻松地将 Julian 转换回月/日/年等。我相信 MS Excel 在内部将日期存储为浮点数,因此您将成为好公司。

于 2013-05-20T00:18:26.623 回答