我有下面的表格
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
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:
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; --6880832el_temp和el_temp2之间唯一的区别是"distinct“运算符。现在,我从SQL Developer获得了以下结果

这对我来说是一个令人惊讶的结果,EL_TEMP具有更多的行,而el_temp2具有更少的行但更大的大小。
有没有人能跟我分享一下原因以及如何避免这种情况的发生?
提前感谢!
发布于 2020-12-24 13:46:47
最可能的原因是该表在其生命周期内对现有行进行了一些更新。
默认情况下,当您创建表时,我们在每个块中保留10%的空间用于增长行(由于更新)。随着更新的发生,该空间将被用完,因此您的块可能(平均)已满95%左右。
当您从该表到另一个表执行"create table as select“时,我们将获取这些块,并将它们再次填充到10%的空闲空间,从而使其稍微大一些。
如果你不熟悉PCTFREE等,我还有一个教程视频,可以让你在这里入门
https://stackoverflow.com/questions/65404300
复制相似问题