【问题标题】:Save data as array or in multiple rows? Which way is more efficient?将数据保存为数组还是多行?哪种方式更有效?
【发布时间】:2015-03-04 15:49:33
【问题描述】:

目前我在 mysql db 中有很多行

venue_id
venue_name
venue_location
venue_geolocation
venue_type
venue_url
venue_manager
venue_phone
venue_logo
venue_company
venue_zip
venue_vat
venue_visible

将大部分数据存储在一个数组和一行中会更有效吗,比如venue_data。然后它将只留下 3 行的场地_id、场地_数据、场地_可见。然后在我的应用程序中,我可以爆炸该数组。它会节省时间和服务器负载吗?

【问题讨论】:

  • 当您的意思是存储为数组时,您是指将不同种类的信息装订到一个数据库列(字符串)中吗?
  • 它可能(怀疑)节省的最少时间不值得失去可读性、不同的数据类型、查询特定列的能力以及使用一列获得的许多其他好处每条信息,更不用说您将时间解析凌乱的字符串添加到数组中,而不是简单地使用 $result->fetch_assoc()。我建议您保留当前的设置。

标签: mysql arrays database


【解决方案1】:

将值存储为数组(将不同的值连接成一个字符串?)绝对是个坏主意,因为:

  • 您将失去可读性,
  • 您将无法轻松搜索串联列,
  • 您无法正确索引这些列。

此外,它不会影响性能 - 另请参阅 Is there a performance decrease if there are too many columns in a table?

如果您对许多列不满意,您应该考虑规范化 (DB Normalization) 您的数据库架构。

【讨论】:

    【解决方案2】:

    您必须问问自己,您“可能”节省的时间和空间是否值得付出代价。

    考虑:

    • 将列合并为一个列的长度仍与所有列分开时的长度相当
    • 使用适当大小的data types 可能会节省更多空间
    • 磁盘空间便宜
    • 拥有不同的列使您能够查询其中的任何列
    • 不同的列还允许您在以后轻松添加或删除列,而无需重新构建每一行的组合列
    • 您可以使用不同的列 $result->fetch_assoc() 立即在数组中获取结果行,而不是花费处理时间来解析复杂的字符串
    • 解析这样的字符串可能容易出现选择特定列不会出现的错误
    • 您可以在单个列上添加外键约束和索引,如果将它们组合起来,它们将不起作用
    • 您可以轻松地搜索不同的列,但如果将它们组合起来就不行了

    我可以想出更多的理由来说明为什么不同的列是一个更好的选择,而不是尝试以一种可能不会为您节省任何时间的方式优化代码。查询可能会快几毫秒,但您在处理字符串时浪费了时间。

    【讨论】:

      猜你喜欢
      • 2011-08-08
      • 2019-05-27
      • 2022-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-30
      • 2012-01-01
      • 2012-02-29
      相关资源
      最近更新 更多