gpt4 book ai didi

database - 我如何知道 Oracle 中的表是否存在碎片?

转载 作者:搜寻专家 更新时间:2023-10-30 20:31:15 25 4
gpt4 key购买 nike

我有一张 table ,它似乎占用了比实际需要更多的空间。有人建议我将数据复制到新表并重命名新表和旧表以交换它们。如何确认当前表是否实际上是碎片化的?如何估计或计算包含相同数据的新表的新大小?

最佳答案

如果您的统计数据是最新的,那么如果表中的 block 比行数据量所建议的多得多,这应该会给出一个不错的指示。

select table_name, round((num_rows * avg_row_len) /(8*1024)), blocks 
from user_tables where ....

此空间将用于将来的插入,因此不一定是问题。如果您进行了大量归档或删除数据,可能值得回收空间(尤其是在进行大量全表扫描时)。 [注意:我假设 8k block ,这是默认值。]

如果您执行 CREATE/DROP/RENAME,您将丢失所有索引、约束、授权(如果您使用它们,还有表注释)。

您最好检查当前表空间(查看 USER_SEGMENTS)并执行 ALTER TABLE tablename MOVE current_tablespace;

之后您还需要重建索引。从 USER_INDEXES 中选择它们并执行 ALTER INDEX ... REBUILD;

关于database - 我如何知道 Oracle 中的表是否存在碎片?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6342540/

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