如何在内部处理 oracle clobs?
How are oracle clobs internally handled?
我在数据库中有一列(CLOB 类型),其中包含 json 个字符串。这些 json 字符串的大小可能变化很大。如果这些字符串少于 4000 个字符,我听说 Oracle 在内部将这些 CLOB 视为 VARCHAR。但是,我很好奇这个过程究竟是如何工作的。我感兴趣的是视觉上看到 json 被存储的性能和能力。
如果数据库中的 CLOB 有 50 个字符,Oracle 会将这个单个对象视为 VARCHAR2(50) 吗?存储在列中的所有 CLOB 是否需要少于 4000 个字符,Oracle 才能将整个列视为 VARCHAR?这一切是如何运作的?
Oracle 不会总是 将短 CLOB
值视为 VARCHAR2
值。只有在您允许它使用 ENABLE STORAGE IN ROW
的 CLOB
存储选项时,它才会这样做。例如,
create table clob_test (
id number NOT NULL PRIMARY KEY,
v1 varchar2(60),
c1 clob
) lob(c1) store as (enable storage in row);
在这种情况下,Oracle 会将 C1
的数据存储在 table 块中,就在 ID
和 V1
的值旁边。只要 CLOB
值的长度小于 接近 4000 字节(即 4000 减去 space 在CLOB
)。
在这种情况下,CLOB
数据将像 VARCHAR2
一样读取(例如,存储 CHUNK
大小变得无关紧要)。
如果 CLOB
变得太大,Oracle 会像任何大的 CLOB
值一样悄悄地将它从块中移出到单独的存储中。
If a CLOB in the DB has 50 characters does Oracle treat this single object as VARCHAR2(50)?
基本上,如果 CLOB
是用 ENABLE STORAGE IN ROW
创建的。此选项事后无法更改。我不会指望 Oracle 在各个方面都将 CLOB
完全 视为 VARCHAR2
。例如,系统控制信息存储在行内 CLOB
中,但未存储在 VARCHAR2
列中。但出于许多实际目的,包括性能,它们非常相似。
Do all CLOBs stored in the column need to be less than 4000 characters for Oracle to treat the whole column as a VARCHAR?
没有。它是逐行显示的。
How does this all work?
我尽我所能解释了我所知道的。 Oracle 不发布其内部算法。
我在数据库中有一列(CLOB 类型),其中包含 json 个字符串。这些 json 字符串的大小可能变化很大。如果这些字符串少于 4000 个字符,我听说 Oracle 在内部将这些 CLOB 视为 VARCHAR。但是,我很好奇这个过程究竟是如何工作的。我感兴趣的是视觉上看到 json 被存储的性能和能力。
如果数据库中的 CLOB 有 50 个字符,Oracle 会将这个单个对象视为 VARCHAR2(50) 吗?存储在列中的所有 CLOB 是否需要少于 4000 个字符,Oracle 才能将整个列视为 VARCHAR?这一切是如何运作的?
Oracle 不会总是 将短 CLOB
值视为 VARCHAR2
值。只有在您允许它使用 ENABLE STORAGE IN ROW
的 CLOB
存储选项时,它才会这样做。例如,
create table clob_test (
id number NOT NULL PRIMARY KEY,
v1 varchar2(60),
c1 clob
) lob(c1) store as (enable storage in row);
在这种情况下,Oracle 会将 C1
的数据存储在 table 块中,就在 ID
和 V1
的值旁边。只要 CLOB
值的长度小于 接近 4000 字节(即 4000 减去 space 在CLOB
)。
在这种情况下,CLOB
数据将像 VARCHAR2
一样读取(例如,存储 CHUNK
大小变得无关紧要)。
如果 CLOB
变得太大,Oracle 会像任何大的 CLOB
值一样悄悄地将它从块中移出到单独的存储中。
If a CLOB in the DB has 50 characters does Oracle treat this single object as VARCHAR2(50)?
基本上,如果 CLOB
是用 ENABLE STORAGE IN ROW
创建的。此选项事后无法更改。我不会指望 Oracle 在各个方面都将 CLOB
完全 视为 VARCHAR2
。例如,系统控制信息存储在行内 CLOB
中,但未存储在 VARCHAR2
列中。但出于许多实际目的,包括性能,它们非常相似。
Do all CLOBs stored in the column need to be less than 4000 characters for Oracle to treat the whole column as a VARCHAR?
没有。它是逐行显示的。
How does this all work?
我尽我所能解释了我所知道的。 Oracle 不发布其内部算法。