构建数据仓库时的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的主要内容,如果未能解决你的问题,请参考以下文章
varchar2_to_blob,应用向数据库更新LOB字段时的超时问题