我在Oracle中有一个表,目前存储了近百万条记录。该表有2个CLOB列,用于存储XML数据。我还为这个特定的表构建了一个搜索屏幕,用户可以搜索除CLOB列之外的所有列。
现在这是我的问题 -
假设我在频繁搜索列上有正确的索引,表中是否存在CLOB列会影响性能,同时在表中搜索记录吗?
让我们说如果我将这两个CLOB列移动到一个新表中并使用主键定义与其父表的关系,它是否会提高记录搜索和检索的性能。
让我知道。
答案 0 :(得分:5)
LOB(包括CLOB)可以内联或外联存储。对于较小的CLOB,内联存储更为正常(例如,典型值可能是几百个字节,但偶尔有几千个条目)。更多详情here
外部存储对应于您将这些CLOB移动到新表的说法。所以,不要打扰这样做,如果有帮助,只需使用“行中的禁用存储”选项。
哪个更好?这取决于。如果没有,那么Oracle会选择最好的,而不是给你另一个选项。
存储内联意味着每行占用更多空间,因此内存缓存中的行数可能更少,这意味着您需要更频繁地访问磁盘,这样会更慢。单独存储它们意味着,当您需要这些列时,您需要获取额外的数据块,可能来自磁盘而不是缓存,这将会更慢。
如果您经常使用CLOB,并且它们很小,那么您可能会在行内更好。
但为什么要将XML存储为CLOB而不是XMLType?