我在 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/