【问题标题】:Can denormalization become inefficient?非规范化会变得低效吗?
【发布时间】:2013-03-28 01:30:36
【问题描述】:

我们有一个非规范化的表,因为对于我们用户的数据量来说,连接速度太慢的风险很大。所以我们创建了 10 列信息(INFO0、INFO1...INFO9)。大多数情况下,只使用第一列的 2-3,其他为空。

但是现在,我们需要再添加两种类型的信息,每列 10 列(总共 20 列新列)。棘手的部分是,我们的设计将使用户无法使用所有 30 个非规范化列。在任何时候,他们总是能够在每行上使用最多 10 个。此外,我们可能需要添加更多新的非规范化列,但我们永远无法在每行上使用超过 10 个。

我知道这不是一个好的设计,但我们真的别无选择。所以我的问题是:这种设计会变得低效吗?有很多具有空值的列会减慢我的查询速度吗?如果是的话,它会成为一件大事吗?

【问题讨论】:

    标签: database denormalization query-performance


    【解决方案1】:

    是的,它可以。你没有说你正在使用什么数据库或者额外的列是什么数据类型,但是添加更多的列会增加你的表的“宽度”,这意味着需要更多的逻辑读取来检索相同数量的记录,更多的读取等于更慢的速度。因此,您通过非规范化获得的收益最终可能会因添加太多列而丢失,但这程度取决于您的数据库设计。

    如果确实影响性能,中间解决方案可能是垂直拆分表,将不经常引用的列放置在第二个表中。

    【讨论】:

    • 谢谢。我没有说具体的数据库,因为我想要“适合”大多数关系数据库系统的答案。对于列的类型,我们讨论的是简单类型:int、varchar、date。没有 CLOB 或 BLOB 或大数据。您认为性能损失会很大吗?如果大部分值为 Null,是否仍然适用?
    • 在 SQL Server 中,除了类型以 VAR 或 NVAR 开头的字段外,所有字段都具有固定长度,无论它们是否包含 NULL,因此例如 CHAR(255) 将始终占用 255 个字节的存储空间,而 VARCHAR( 255) 将使用存储的字符串长度加上一个额外的字节。
    猜你喜欢
    • 2019-04-21
    • 2017-03-05
    • 2013-08-21
    • 2016-05-13
    • 2018-06-06
    • 2010-10-11
    • 2014-06-06
    • 1970-01-01
    • 2021-06-13
    相关资源
    最近更新 更多