gpt4 book ai didi

sql - 当存储为 BINARY XML 时,Oracle XMLType 有多大

转载 作者:数据小太阳 更新时间:2023-10-29 01:41:42 25 4
gpt4 key购买 nike

Oracle 文档声称它将 XMLType 存储为 BINARY XML 比 CLOB 更紧凑。但是我如何找出二进制 xml 占用了多少空间呢?

CREATE TABLE t (x XMLTYPE) XMLTYPE x STORE AS BINARY XML;

SELECT vsize(x), dbms_lob.getlength(XMLTYPE.getclobval(x)) FROM t;

94 135254
94 63848
94 60188

因此,vsize 似乎是某种指针或 LOB 定位器的大小,getclobval 将二进制 XML 解压缩为文本。但是二进制 XML 本身的存储大小呢?

请帮助,表大小为 340GB,因此值得研究存储选项...

最佳答案

Oracle Binary XML格式对应“Compact Schema Aware XML Format”缩写为CSX。编码数据存储为 BLOB 字段。 Oracle 文档(herehere)中提供了有关二进制 XML 格式的详细信息。

数据字段的实际大小取决于 XMLType 列的 LOB 存储参数。例如。如果启用 storage in row 选项,则小文档直接与其他数据一起存储,vsize() 返回适当的值。

实际上 Oracle 会创建带有系统名称的底层 BLOB 列,可以通过查询 user_tab_cols View 找到:

select table_name, column_name, data_type 
from user_tab_cols
where
table_name = 'T' and hidden_column = 'YES'
and
column_id = (
select column_id
from user_tab_cols
where table_name = 'T' and column_name = 'X'
)

此查询返回系统隐藏列名称,类似于 SYS_NC00002$

之后,可以使用针对隐藏列的常规 dbms_lob.getlength() 调用来获取字段的大小:

select dbms_lob.getlength(SYS_NC00002$) from t

关于sql - 当存储为 BINARY XML 时,Oracle XMLType 有多大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24764707/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com