MySQL表中的字段数量限制和最大字段数:了解数据库设计的限制和最佳实践

12,327次阅读
没有评论

共计 1151 个字符,预计需要花费 3 分钟才能阅读完成。

重度健忘症患者
2023-11-28 17:58:06
浏览数 (3460)

在数据库开发中,有时候我们会遇到一个表中包含大量字段的情况。当我们使用数据库客户端查询时,可能会发现屏幕无法完全展示所有字段,需要进行水平滚动才能查看全部内容。这种情况下,我们可能会认为字段太多了,产生了拆分表的想法。然而,实际情况并非如此简单。字段数量本身并不是决定是否需要拆分表的唯一因素。在考虑是否拆分表之前,我们需要了解 MySQL 的存储机制。

MySQL 存储机制

MySQL 分两层 server 层和存储引擎层(innodb):

  • MySQL server 层限制字段最多 4096 个,innodb 限制最多 1017,因此一 innidb 为准。
  • MySQL server 层在行长度加起来超过 65535 就会拒绝建表。innodb 再字段长度总和超过 8126 就会拒绝建表。

为什么 innodb 字段总和不能超过 8126?

innodb 为了保证 B +TREE 是一个平衡树结构,一条记录的长度,不能超过 innodb_page_size 大小的一半。下面是 innodb B+ 树的结构,我们可以想象一下二分查找时,一个页的只有一条数据会是什么样子。每个页只有一条数据的查找就变成了链表查找,这样就没有二分查找的意义了。MySQL 中默认的页大小是 16K,16K 的一半是 8196 字节减去一些元数据信息就得出了 8126 这个数字。

如何计算字节总和长度?

  1. 对于小于 40 字节的字段长度,直接按照实际长度计算。
  2. 对于大于 40 字节的字段长度,可以将其估算为 40 字节。
  3. 将每个字段的字节长度相加,并乘以字段的数量,即可得到总的字段字节长度。

需要注意的是,这种估算方式并不考虑数据库系统 的具体实现细节,而是提供了一个简化的计算方法。实际的数据库系统可能会有一些额外的存储开销,因此在进行容量规划和设计时,应结合具体情况进行综合考虑

总结

在实际使用情况中,一般认为当一个表的字段数量达到 200~500 个时,可以视为字段较多的情况。这是因为过多的字段可能导致表结构复杂、查询性能下降以及数据一致性难以维护的问题。网上也有很多文章提到 200 个字段就拒绝建表的建议。具体是 200 还是 500,还需根据每个字段的长度设计和具体业务需求来综合考虑。在数据库设计时,应当谨慎评估表结构的复杂性、查询性能和数据一致性等因素,以确保表的可读性、维护性和性能。

1698630578111788

如果你想提升自己的编程水平或者了解更多与编程有关的资讯,欢迎访问编程狮官网(https://www.w3cschool.cn/)。编程狮提供丰富的技术教程、文章和资源,帮助你在编程和技术领域不断成长。无论你是初学者还是有经验的开发者,我们都有适合你的内容,助你在编程之路上取得成功。

原文地址: MySQL 表中的字段数量限制和最大字段数:了解数据库设计的限制和最佳实践

    正文完
     0
    Yojack
    版权声明:本篇文章由 Yojack 于2024-09-20发表,共计1151字。
    转载说明:
    1 本网站名称:优杰开发笔记
    2 本站永久网址:https://yojack.cn
    3 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
    4 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
    5 本站所有内容均可转载及分享, 但请注明出处
    6 我们始终尊重原创作者的版权,所有文章在发布时,均尽可能注明出处与作者。
    7 站长邮箱:laylwenl@gmail.com
    评论(没有评论)