gpt4 book ai didi

mysql - 与 MySQL ALTER TABLE 相比,Oracle 架构的性能发生了变化?

转载 作者:可可西里 更新时间:2023-11-01 07:50:46 31 4
gpt4 key购买 nike

当使用 MySQL MyISAM 表并发出 ALTER TABLE 语句来添加列时,MySQL 会创建一个临时表并将所有数据复制到新表中,然后覆盖原始表。

如果那个表有很多数据,这个过程可能会很慢(尤其是在重建索引时),并且需要您在磁盘上有足够的可用空间来存储该表的 2 个副本。这很烦人。

Oracle 在添加列时是如何工作的?在大 table 上速度快吗?

我一直对能够在没有大量停机时间的情况下进行架构更改很感兴趣。我们一直在为我们的软件添加新功能,这需要在每次发布时更改架构。任何建议表示赞赏...

最佳答案

在Oracle中向一个大表中添加一个没有数据的列一般是非常快的。没有数据的临时副本,也不需要重建索引。当您想要向大型表中添加一列并将数据回填到所有现有行的新列中时,通常会出现缓慢,因为现在您正在谈论影响大量行的 UPDATE 语句。

随着时间的推移,添加列会导致行迁移。如果您有一个 80% 满且有 4 行的 block ,并且您添加的列将随着时间的推移每行的大小增加 30%,您最终将达到 Oracle 必须将 4 行之一移动到不同的点堵塞。它通过在旧 block 中留下指向新 block 的指针来实现这一点,这会导致对该迁移行的读取需要更多 I/O。消除迁移的行可能会有些昂贵,虽然假设您使用的是企业版通常可以在不停机的情况下完成,但如果您有一点停机时间通常会更容易。但是行迁移是您通常只需要担心的事情。如果您知道某些表的行大小将来可能会大幅增加,您可以通过为表指定更大的 PCTFREE 设置来提前缓解问题。

关于mysql - 与 MySQL ALTER TABLE 相比,Oracle 架构的性能发生了变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/613059/

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