2010-08-12 82 views
2

我在Oracle中有一个表,当前正在存储近百万条记录。此表有2个存储XML数据的CLOB列。我还为这个特定的表建立了一个搜索屏幕,用户可以搜索几乎除CLOB列外的所有列。数据检索 - 在Oracle中使用CLOB列的性能

现在,这里是我的问题 -

假设我有正确的索引在地方上经常搜索列,莫非CLOB列在表效应的存在,而搜索记录表中的表现?

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

让我知道。

回答

5

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

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

哪个更好?这取决于。如果没有,那么甲骨文会尽力而为,而不是让你选择另一个。

存储内联意味着每一行都占用更多的空间,因此您的内存缓存中的行数可能会减少,这意味着您需要更频繁地访问磁盘,这比较慢。将它们分开存储意味着,当您需要这些列时,您需要获取额外的数据块,可能来自磁盘而不是缓存,并且速度会更慢。

如果你经常使用CLOB,而且它们很小,那么你可能会在行内更好。

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

+0

使用XMLType优于CLOB的优点是什么?你能澄清一下吗? – jagamot 2010-08-16 14:36:16

+0

这就像将日期存储为日期,而不是数字或字符串。您知道它是格式良好的XML,并且可以对其进行XML操作而无需转换开销。 – 2010-08-16 22:51:58