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

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

【问题讨论】:

    标签: oracle data-warehouse


    【解决方案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 时大小更小。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-07-19
        • 1970-01-01
        • 2020-05-06
        • 1970-01-01
        • 1970-01-01
        • 2017-09-24
        • 1970-01-01
        相关资源
        最近更新 更多