首页 新闻 会员 周边

oracle中数据存储有行连接、行迁移概念。想问下MySQL中有行迁移行连接的概念吗?

0
悬赏园豆:10 [待解决问题]

当一行的数据过长而不能插入一个单个数据块中时,可能发生两种事情:行链接(row chaining)或行迁移(row migration)。
行链接
当第一次插入行时,由于行太长而不能容纳在一个数据块中时,就会发生行链接。在这种情况下,oracle会使用与该块链接的一块或多块数据块来容纳该行的数据。行连接经常在插入比较大的行时才会发生,如包含long, long row, lob等类型的数据。在这些情况下行链接是不可避免的。
行迁移
当修改不是行链接的行时,当修改后的行长度大于修改前的行长度,并且该数据块中的空闲空间已经比较小而不能完全容纳该行的数据时,就会发生行迁移。在这种情况下,Oracle会将整行的数据迁移到一个新的数据块上,而将该行原先的空间只放一个指针,指向该行的新的位置,并且该行原先空间的剩余空间不再被数据库使用。

以上是oracle数据库中行迁移和行连接现象,想问一下mysql中有没有行连接和行迁移的概念啊

日常云吸猫的主页 日常云吸猫 | 初学一级 | 园豆:89
提问于:2023-11-15 11:33

MySQL中没有专门称为"行连接"和"行迁移"的概念,但可以使用JOIN操作和数据迁移技术来实现类似的功能。

CallMeEureka 5个月前
< >
分享
所有回答(1)
0

在MySQL中,不具有与Oracle中行链接(row chaining)和行迁移(row migration)完全相同的概念。但是,在InnoDB存储引擎中存在一个叫做“行溢出”(Row Overflow)的概念,它解决了长行数据的问题。当一行的数据长度超过了一个数据库页的1/2(InnoDB中默认的页面大小为16KB),InnoDB会将该行的一部分或全部长列值存储到其他页面中,以保持主要的页面空间。

可以采用以下方式来避免行溢出:

  • 将表中的某些列设置为TEXTBLOB类型。
  • 更改InnoDB的页面大小(需要重新编译MySQL)。

虽然这种机制可以解决长行数据的问题,但也可能导致性能下降,因为读取一行记录可能需要多次磁盘I/O操作。所以,在设计数据库时,我们应尽量避免插入过长的行。

在MySQL中,如果更新一个行使得其大小增加并且无法适应原始页面,那么InnoDB会尝试寻找一个足够大的连续空闲空间来存放这个行,并将所有对这个行的引用都指向新的位置。如果找不到足够的连续空闲空间,InnoDB会触发页分裂,创建一个新的页面来容纳这条记录。这种过程与Oracle中的行迁移类似,但不完全相同。

npe0 | 园豆:1299 (小虾三级) | 2023-12-12 16:30
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册