首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle LOB不被内联存储

Oracle LOB不被内联存储
EN

Stack Overflow用户
提问于 2014-04-15 10:46:52
回答 1查看 561关注 0票数 2

设置

我有一个oracle表,它有两个属性和一个CLOB数据类型。下面的表有两种方法创建,每一种方法都应该给出相同的行为。

代码语言:javascript
复制
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)

场景

  1. 根据oracle文档,当CLOB大于4000字节时,它将内联存储outline stored。
  2. 当我将数据存储在这个表中,以一个clob值表示"Hello“,然后我看到"Demo表”和"Demo表LOB段“的段信息时,它将显示所有数据都将被放到表中,而在Lob段中没有使用新的块。
  3. 当我存储一个字符总数小于1500的较大数据时,我也会得到与上面相同的行为。
  4. 但是,当我存储一个总字符> 2000和< 3000的数据时,即使总字符小于3000,LOB数据也会进入LOB段。

问题

  1. 为什么数据小于3000个字符将进入LOB段?每一个字符都需要两个字节,这就证明了直到1500年的数据才会流向数据,而不是日志段。

问题

由于LOB表,很多磁盘空间被浪费了,因为块大小是8kb,每个块的数据总是在3-4K字符左右,在某些情况下超过了这一点。对于每一行来说,4Kb的空间都是浪费的,在20百万行的情况下,它在50%的GBs中运行。

EN

回答 1

Stack Overflow用户

发布于 2014-04-16 06:48:07

这可能是上述行为的原因。

“CLOB和NCLOB数据类型在数据库中存储最多4G的字符数据。CLOBs存储数据库字符集数据,NCLOBs存储Unicode国家字符集数据。对于不同宽度的数据库字符集,使用具有固定宽度的两字节Unicode字符集将CLOB值存储在数据库中。Oracle将存储的Unicode值转换为客户端或服务器上请求的字符集,该字符集可以是固定宽度,也可以是可变宽度。当使用可变宽度字符集将数据插入CLOB列时,Oracle在将数据存储到数据库之前将数据转换为Unicode。

01/server.920/a96524/c13datyp.htm#3234

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23081436

复制
相关文章

相似问题

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