gpt4 book ai didi

php - MySQL 数据库结果是否会因表中的列数而变慢?

转载 作者:行者123 更新时间:2023-11-29 14:56:55 24 4
gpt4 key购买 nike

使用 PHP,我正在构建一个需要大量 MySQL 数据库资源的应用程序,但我也需要它的数据非常灵活。目前有许多表具有不同列的数组(包括一些文本、长文本、整数等),将来我想扩展这些表的列数,每当新的数据组出现时必填。

我的问题是,如果我有一个包含 10 列的表,并且我将来将其扩展到 40 列,SQL 查询(通过 PHP)会大大减慢吗?

只要最初的小查询(仅查找最初的 10 列)不是 SELECT-all (*) 查询,我就想知道是否使用了更多资源或处理,因为源表现在太多了更大。

此外,由于许多列现在始终保留为 NULL 值(例如,每当插入仅需要前 10 列的新条目时),数据库通常会运行得更慢或更大吗?

最佳答案

出于各种原因,MyISAM 和 InnoDB 在这方面的表现有所不同。

例如,InnoDB 会为磁盘上的每一列分区磁盘空间,无论其中是否有数据,而 MyISAM 会压缩磁盘上的表。在存在大量空列的情况下,InnoDB将浪费大量空间。另一方面,InnoDB 执行行级锁定,这意味着(有注意事项)对同一个表的并发读/写将执行得更好(MyISAM 在写入时执行表级锁定)。

一般来说,在一个表中包含许多列可能不是一个好主意,特别是出于波动性原因。例如,在 InnoDB(也可能是 MyISAM?)中,在表中间重新排列列或更改列类型(即 varchar 128 -> varchar 255)要求将右侧列中的所有数据在磁盘上移动,以便为更改的列腾出(或删除)空间。

就您的整体数据库设计而言,最好的目标是尽可能多的列不为空,这样可以节省空间(您不需要在列上使用 null 标志,并且您不存储空数据)并且还提高了查询和索引性能。如果许多记录将特定列设置为空,您可能应该将其移动到外键关系并使用 JOIN。这样,磁盘空间和索引开销只会发生在实际保存信息的记录上。

关于php - MySQL 数据库结果是否会因表中的列数而变慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4363017/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com