java - 数据检索 - Oracle 中 CLOB 列的性能

标签 java database oracle database-design

我在 Oracle 中有一个表,当前存储了近百万条记录。该表有 2 个存储 XML 数据的 CLOB 列。我还为这个特定的表构建了一个搜索屏幕,用户可以在其中搜索除 CLOB 列之外的几乎所有列。

现在这是我的问题 -

假设我在频繁搜索的列上建立了正确的索引,表中 CLOB 列的存在是否会影响在表中搜索记录时的性能?

假设如果我将这 2 个 CLOB 列移动到一个新表中,并使用主键定义与其父表的关系,是否会提高记录搜索和检索方面的性能。

请告诉我。

最佳答案

LOB(包括 CLOB)可以内联或外联存储。内联存储对于较小的 CLOB 更为常见(例如,典型值可能是几百字节,但偶尔有几千个条目)。更多详情here

线外存储对应于您所说的将这些 CLOB 移动到新表的内容。因此,不必费心这样做,如果有帮助,只需使用“DISABLE STORAGE IN ROW”选项即可。

哪个更好?这取决于。如果没有,那么 Oracle 就会选择最好的,而不给你其他的选择。

内联存储意味着每行占用更多空间,因此内存缓存中的行数可以减少,这意味着您需要更频繁地访问磁盘,从而速度更慢。单独存储它们意味着,当您需要这些列时,您需要获取额外的数据 block ,可能是从磁盘而不是缓存中获取,这会更慢。

如果您经常使用 CLOB,并且它们很小,那么您最好采用行内方式。

但是为什么将 XML 存储为 CLOB 而不是 XMLType 呢?

关于java - 数据检索 - Oracle 中 CLOB 列的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3464543/

相关文章:

android - 在Android应用程序中使用从mysql转换而来的sqlite数据库

sql-server - 为什么长时间运行的查询的连接数不断增加?

java - 引用游标和结果集

sql - PLS-00488 : object "string" must be a type or subtype - but it is a type

java - 如何使用 SAX 解析器删除元素

java - Log4j StringMatchFilter 和 denyAll 过滤器属性配置

java - Wicket 和多线程业务对象

c# - 如果数据库中的值发生变化,如何持续更新该值

sql - 表锁会加速 Oracle 10g 企业版中的更新语句吗?

java Kafka生产者错误