oracle数据库中的NCLOB列与NVARCHAR

oracle数据库中的NCLOB列与NVARCHAR,oracle,oracle11g,Oracle,Oracle11g,我必须在oracle表中存储可变长度的文本。它们中的大多数将少于200个字符,但其中一些局部将有数千个字符 我很想将列定义为NCLOB,因为此数据类型最多可存储4GB,但我想知道这样做会有什么问题,因为在NVARCHAR列不足的98%的情况下 一旦插入,这些值不会频繁更改 将有数十万条记录 谢谢即使它是%2,数据就是数据,对吗?您必须存储这些少数群体数据,因此必须使用CLOB您是对的,但另一种选择是更复杂的表结构。可能是一个NVARCHAR列和另一个NCLOB,或者类似的东西。但是如果只使用

我必须在oracle表中存储可变长度的文本。它们中的大多数将少于200个字符,但其中一些局部将有数千个字符

我很想将列定义为
NCLOB
,因为此数据类型最多可存储4GB,但我想知道这样做会有什么问题,因为在
NVARCHAR
列不足的98%的情况下

  • 一旦插入,这些值不会频繁更改
  • 将有数十万条记录

谢谢

即使它是
%2
,数据就是数据,对吗?您必须存储这些少数群体数据,因此必须使用
CLOB

您是对的,但另一种选择是更复杂的表结构。可能是一个NVARCHAR列和另一个NCLOB,或者类似的东西。但是如果只使用一个NCLOB列(将有数十万条记录)没有性能问题,我会选择更简单的方法。当您创建
NCLOB
字段时,db会创建一个
LOBINDEX
并将字段数据存储在
索引中。如果创建一个
NVARCHAR
字段,db只创建用于存储字段数据的表段。如果大多数查询都是
SELECT
查询,则应使用
NCLOB
字段,因为它是预索引的。但是请注意,您的
INSERT
s和
UPDATE
s将比
NVARCHAR
解决方案慢。您也可以在
NVARCHAR
上创建手动索引,但这可能会使您的数据量增加近一倍。对于存储侧,使用
NCLOB
是有益的。但是对于
DML
速度,使用
NVARCHAR
字段。