【问题标题】:How many columns in MySQL tableMySQL表中有多少列
【发布时间】:2010-10-12 10:58:51
【问题描述】:

一个 MySQL 表可以有多少个字段?

我有一个从用户那里获取信息的表格,它分为 6 或 7 个单元,但都相互关联。它们大约有 100 个字段。

你建议把它们都放在一张桌子上吗?


感谢大家的回复,我的表格数据是关于用户的一些个人信息,所有需要做的工作就是从用户那里获取它们,保存并显示它们并具有编辑选项。 我应该使用标准化吗?在我的情况下,它不会增加处理时间吗?

【问题讨论】:

    标签: mysql database-design


    【解决方案1】:

    如果您关注database normalization,您通常应该ok - 尽管您可能会发现一些性能问题。

    对我来说,似乎可能会有一些规范化?

    此外,您应该考虑这些列中有多少只有空值,以及您使用的命名约定(不仅仅是名称、名称 2 等)

    如果您想进一步阅读它。:

    Data normalization basics

    MySql :: An introduction to database normalization

    【讨论】:

      【解决方案2】:

      MySQL 每个表最多支持 4096 列。不要在主表中使用经常取值的字段。

      1. 如果一列取 NULL 没有问题,但如果存储为 " " 它的内存浪费。

      2. 空值通常意味着可选字段数据,那么为什么要将其存储在主表中。

      这就是我在声明中的意思。

      【讨论】:

      • 你能证实你的说法吗?
      • NULL 甚至与"" 相差甚远。 NULL === undefined 其中"" === empty string (可能是因为DEFAULT 或因为用户设置它)。因此,理想情况下,DEFAULT "" 非常令人困惑,理论上没有多大意义。此外,适合数据属性的设计远远超过空间考虑的好处。
      【解决方案3】:

      对此没有一般规则。但是,100 列肯定暗示您的数据库设计是完全错误的。在继续之前,您应该阅读规范化和数据库设计。我有一个数据库设计,大约 150 列被分成近 40 个表,只是为了给你一个想法。

      【讨论】:

      • 您正在建模的属性可能都与单个实体相关,但这只是典型的数据库设计情况。考虑一辆汽车和一台发动机。即使只有一个引擎并不意味着不应将其放入自己的表中(一对一关系)。
      • 我已经提出了一个有点独立于 DBMS、更实用的 SQL 和数据库设计指南,它也在这里处理 MySQL 的古怪之处:kawoolutions.com/SQL_Database_Design
      【解决方案4】:

      对于不需要索引或搜索的数据,我在我的数据库中创建一个列,例如 col_meta,它包含一个序列化的 PHP 值数组,它可以节省空间并且可以根据需要扩展或收缩。只是一个想法。

      【讨论】:

        【解决方案5】:

        如果它们都相关并且不能被规范化(更不用说没有> 1 被序列化)那么我想它会没问题。

        你确定有些东西不能分成多个表吗?您能否提供您正在收集的信息的样本?

        你能把事情分成诸如

        • user_details
        • user_car_details
        • ...

        【讨论】:

          【解决方案6】:

          我通常会在大约 20-30 列之后开始将它们拆分为单独的表。但是,它实际上取决于您将如何使用数据。

          如果您总是需要所有列,那么将它们拆分为单独的表会增加不必要的复杂性和开销。但是,如果存在倾向于一起访问的列组,则沿表之间以 1-1 关系拆分这些行可能会很有用。

          如果性能是一个问题,特别是如果您的表中有较大的文本列,则此技术可能很有用。


          最后,我会回应其他关于标准化的海报。一个表中包含 100 列的情况相对较少,可能需要对表进行规范化。

          例如列,SETTING_1, SETTING_2, SETTING_3, SETTING_4 在单独的 SETTINGS 表中可能更好,该表与原始表具有一对多关系。

          【讨论】:

            【解决方案7】:

            谢谢大家,所以我认为最好将我的一些数据合并到一列中,这样可以节省更多空间并减少开销

            【讨论】:

              【解决方案8】:

              我注意到大约 10 000 行的数据库中大约 65 列的性能损失。但可能是缺少服务器结构或其他原因。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2011-10-05
                • 2010-12-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多