首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我的表占用了更多的空间,即使它的行比其他表少?

为什么我的表占用了更多的空间,即使它的行比其他表少?
EN

Stack Overflow用户
提问于 2020-12-22 14:46:39
回答 1查看 48关注 0票数 0

我有下面的表格

代码语言:javascript
运行
复制
Create table my_source(
   ID number(15) not null,
   Col_1 Varchar 2(3000),
   Col_2 Varchar 2(3000),
   Col_3 Varchar 2(3000),
   Col_4 Varchar 2(3000),
   Col_5 Varchar 2(3000),
   ...
   Col_90 Varchar 2(3000)
);

这个表有6926220行。

现在我将在这个表的基础上创建两个表。

Target1

代码语言:javascript
运行
复制
Create table el_temp as
select 
    id,
    Col_1,
    Col_2,
    Col_3,
    Col_4,
    Col_5,
    Col_6,
    Col_7,
    Col_8,
    Col_9,
    Col_10,
    Col_11,
    Col_12
from
    my_source;

Target2:

代码语言:javascript
运行
复制
Create table el_temp2 as
select DISTINCT
    id,
    Col_1,
    Col_2,
    Col_3,
    Col_4,
    Col_5,
    Col_6,
    Col_7,
    Col_8,
    Col_9,
    Col_10,
    Col_11,
    Col_12
from
    my_source;

select count(*) from el_temp; -- 6926220
select count(*) from el_temp2; --6880832

el_temp和el_temp2之间唯一的区别是"distinct“运算符。现在,我从SQL Developer获得了以下结果

这对我来说是一个令人惊讶的结果,EL_TEMP具有更多的行,而el_temp2具有更少的行但更大的大小。

有没有人能跟我分享一下原因以及如何避免这种情况的发生?

提前感谢!

EN

Stack Overflow用户

发布于 2020-12-24 13:46:47

最可能的原因是该表在其生命周期内对现有行进行了一些更新。

默认情况下,当您创建表时,我们在每个块中保留10%的空间用于增长行(由于更新)。随着更新的发生,该空间将被用完,因此您的块可能(平均)已满95%左右。

当您从该表到另一个表执行"create table as select“时,我们将获取这些块,并将它们再次填充到10%的空闲空间,从而使其稍微大一些。

如果你不熟悉PCTFREE等,我还有一个教程视频,可以让你在这里入门

https://youtu.be/aOZMp5mncqA

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65404300

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档