构建数据仓库时的varchar2 vs date

Posted

技术标签:

【中文标题】构建数据仓库时的varchar2 vs date【英文标题】:Varchar2 vs date when building data warehouse 【发布时间】:2011-07-19 08:52:18 【问题描述】:

在 Oracle 中构建数据仓库时,首选 varchar2 而非日期数据类型是否有任何区别。我的数据仓库并不完全是仓库,因为不需要日期维度(不需要日期层次结构)并且将日期保存为纯“MM-DD-YYYY”格式的字符串就足够了。不过要使用哪种数据类型?

【问题讨论】:

【参考方案1】:

让我们做一点成本/收益分析,好吗?

将“日期”字段保留为VARCHAR2

优点:

格式化报告上的日期时计算成本为零(只要它始终以MM-DD-YYYY 格式显示)。

缺点:

无法编入索引(嗯,在时间顺序的意义上) 搜索计算因TO_DATE 调用而增加 如果日期必须以不同格式出现在某些报告中(例如:TO_CHAR(TO_DATE(date_column, 'MM-DD-YYYY'), 'DD-MON-YYYY')),则需要额外计算 该列并不要求所有值都遵循特定的日期格式,如果需要TO_DATE,则会增加失败的风险。

将“日期”字段更改为DATE

优点:

可以在没有TO_DATE 开销的情况下进行搜索 可以索引 无法插入“错误”值(尽管从业务角度来看,日期可能仍然没有意义) 可以轻松格式化

缺点:

我什么都想不出来

希望这将从技术的角度帮助您做出特定的决定。总是有商业(或办公室政治)视角:

日期维度不是必需的

我会为你解决这个问题:

日期维度不是必需的

假设您将该列保留为VARCHAR2,并且客户出现并要求过滤有关此日期字段的一些报告。假设这正在杀死数据库服务器,您最终需要将其转换为DATE。在贵公司的生产环境中进行这种更改相对容易吗?是否有大量繁文缛节、表格和变更控制板,您必须努力进行简单的变更?如果您确实设法克服了这些障碍,您确定所有日期都以相同的格式存储吗?

【讨论】:

深刻的解释。我会选择 DATE 数据类型。 +1 设计将日期存储为字符串的新数据库没有任何借口。现在是 2011 年,各位!【参考方案2】:

这里的“足够”是什么意思?我可以看到不使用 DATE 会失去什么,但你会得到什么让这值得考虑?当然,如果你持有一个日期值,在某些时候你会想要使用它,例如“2011 年 3 月的销售额”还是什么?

【讨论】:

【参考方案3】:

应避免使用 varchar2,因为它占用空间,为什么要使用占用空间比不占用空间大得多的数据类型?

现在磁盘存储空间可能不是什么大问题,但它可以节省一些 RAM 空间,防止磁盘 I/O,尤其是在频繁访问包含这些日期的记录时。

如果在检索记录时需要磁盘 I/O,它会稍微快一些,因为使用 date 与 varchar2 时大小更小。

【讨论】:

以上是关于构建数据仓库时的varchar2 vs date的主要内容,如果未能解决你的问题,请参考以下文章

构建数据仓库时的临时仪表板/报告解决方案

从 Oracle 迁移 VARCHAR2 数据时的列长度

varchar2_to_blob,应用向数据库更新LOB字段时的超时问题

Oracle VIEW - 将 VARCHAR2 转换为 DATE 并找到 DATE 的 MIN/MAX

oracle中两个varchar2类型的时间怎么进行比较

基于Flink构建实时数据仓库