设置
我有一个oracle表,它有几个属性和一个CLOB数据类型。下面的表格我用两种方式创建,每种方式应该给出相同的行为。
CREATE TABLE DEMO(
a number (10, 2),
data CLOB
)
CREATE TABLE DEMO(
a number (10, 2),
data CLOB
) LOB (data) Stored AS (STORAGE IN ROW ENABLED)
方案
根据oracle文档,当CLOB大于4000字节时,它将以其他内联方式存储。
当我将数据存储在此表中以获取clob值时,请说" Hello"然后我看到"演示表"的段信息。和"演示表LOB段" ,它显示所有数据都将进入表格,并且在Lob Segment中没有消耗新的块。
当我存储总字符小于1500的较大数据时,我也会得到与上述相同的行为。
但是,当我存储总字符数据> 2000和< 3000,然后即使总字符小于3000,LOB数据也会进入LOB段。
问题
问题
由于LOB表,大量磁盘空间被浪费,因为CHUNK大小为8kb,每块的数据总是大约为3 - 4K字符,在某些情况下超过了这个数字。因此每行必不可少的4Kb空间被浪费,并且在20亿行的情况下,它在50英寸的GB中运行
答案 0 :(得分:0)
这可以解释上述行为..
“CLOB和NCLOB数据类型在数据库中存储最多4千兆字节的数据.CLOB存储数据库字符集数据,NCLOB存储Unicode国家字符集数据。对于变宽数据库字符集, CLOB值使用具有固定宽度的双字节Unicode字符集存储在数据库中.Oracle将存储的Unicode值转换为客户端或服务器上请求的字符集,可以是固定宽度或当您使用变宽字符集将数据插入CLOB列时, Oracle会将数据转换为Unicode,然后再将其存储到数据库中。“
http://docs.oracle.com/cd/B10500_01/server.920/a96524/c13datyp.htm#3234