在32k表空间中使用IBM DB2 9.7,假设10000b(万字节)长列非常适合tablespce。这两者之间是否存在差异,是否优先于另一种?
VARCHAR(10000)
CLOB(536870912) INLINE LENGTH 10000
在功能和性能方面是首选还是首选?快速浏览一下CLOB实际上是多功能的;所有短于10000的内容都存储在stablespace中,但是如果需要更大的内容那么这也很好,它只是存储在磁盘上的其他地方。
答案 0 :(得分:3)
有a number of restrictions on the way CLOB
can be used in a query:
特殊限制适用于导致CLOB数据的表达式 类型和结构化类型列;这样的表达式和列是 不允许进入:
- 以DISTINCT子句开头的SELECT列表
- GROUP BY子句ORDER BY子句set运算符other的子选择 比UNION ALL
- 基本的,量化的,BETWEEN或IN谓词
- 聚合函数
- VARGRAPHIC,TRANSLATE和datetime标量函数
- LIKE谓词或搜索中的模式操作数 POSSTR函数中的字符串操作数
- a的字符串表示形式 日期时间值。
因此,如果您需要执行上述任何操作,则首选VARCHAR
。
我没有关于性能的明确答案(遗憾的是,这样的信息似乎不在文档中 - 或者至少,它不容易定位)。但是,从逻辑上讲,数据库与CLOB
有更多的关系。它必须决定是否直接在结果中返回CLOB
。这至少意味着一些开销。这是a good discussion of some of the issues,但它也没有给出明确的表现答案。
我的默认位置是使用VARCHAR
,除非确实需要CLOB
(列中的数据可能大于VARCHAR
限制)。