mysql-多少列太多了?

xa9qqrwz  于 2021-06-20  发布在  Mysql
关注(0)|答案(5)|浏览(298)

我正在设置一个可能有70列以上的表。我现在正在考虑将其拆分,因为不需要每次访问表时都使用列中的一些数据。再说一次,如果我这样做,我就不得不使用连接。
在什么情况下,如果有的话,会认为列太多?

ccrfmcuu

ccrfmcuu1#

在同一个表中有太多的列也会在复制中造成巨大的问题。您应该知道,在主服务器上发生的更改将复制到从服务器上。。例如,如果更新表中的一个字段,整行将是w

ghhaqwfi

ghhaqwfi2#

使用较少的列将表拆分为多个表有一些好处,这也称为垂直分区。以下是一些:
如果表中有许多行,修改索引可能需要很长时间,因为mysql需要重建表中的所有索引。将索引拆分到多个表中可以加快速度。
根据您的查询和列类型,mysql可以将临时表(用于更复杂的select查询)写入磁盘。这是不好的,因为磁盘i/o可能是一个很大的瓶颈。如果查询中有二进制数据(文本或blob),则会发生这种情况。
表越宽,查询性能越慢。
不要过早地优化,但在某些情况下,可以从更窄的表中获得改进。

ctehm74n

ctehm74n3#

当它违反规范化规则时,它就太多了。如果要规范化数据库,很难获得这么多列。设计数据库是为了对问题进行建模,而不是围绕任何人为的规则或针对特定数据库平台进行优化的想法。
将以下规则应用于宽表,则单个表中的列可能会少得多。
没有重复的元素或元素组
对串联键没有部分依赖关系
不依赖于非键属性
这里有一个链接可以帮助你。

aoyhnmkz

aoyhnmkz4#

一旦超过数据库支持的最大限制,就认为它太多了。
不需要每个查询都返回每一列,这是很正常的;这就是select语句允许显式命名所需列的原因。
一般来说,表结构应该反映域模型;如果你真的有70个(100个,你有什么)属性属于同一个实体,没有理由把它们分成多个表。

i86rm4rw

i86rm4rw5#

这不是问题,除非所有属性都属于同一个实体,并且彼此不依赖。为了简化操作,您可以在其中存储一个带有json数组的文本列。很明显,如果每次获取所有属性都没有问题的话。尽管这会完全破坏将其存储在rdbms中的目的,并且会使每个数据库事务变得非常复杂。因此,不建议在整个数据库中采用这种方法。

相关问题