IBM DB2 9.7,内联CLOB和VARCHAR之间有什么区别吗?

3

使用IBM DB2 9.7,在32k表空间中,假设一个长度为10000字节的列在表空间中适合。这两者之间是否有区别,并且是否有一种更受欢迎的方式?

VARCHAR(10000)
CLOB(536870912) INLINE LENGTH 10000

在功能和性能方面,是优先选择哪一个?简单来看,CLOB实际上更加通用;所有长度小于10000的内容都存储在稳定的空间中,但如果需要更大的内容也可以,只是会存储在磁盘的其他位置。

1个回答

3

在查询中使用 CLOB 有许多限制,详见官方文档

CLOB 类型、结构化类型列的表达式有特殊限制,不允许在以下情况下使用:

  • 在 DISTINCT 子句之前的 SELECT 子句中
  • GROUP BY 子句中
  • ORDER BY 子句中
  • UNION ALL 以外的集合运算的子查询中
  • 基本、定量、BETWEEN 或 IN 谓词中
  • 聚合函数中
  • VARGRAPHIC、TRANSLATE 和 datetime 标量函数中
  • LIKE 谓词中的模式操作数或 POSSTR 函数中的搜索字符串操作数
  • 一个 datetime 值的字符串表示。

所以如果需要进行以上任何操作,则应优先使用 VARCHAR

关于性能问题,我没有明确的答案(不幸的是,像这样的信息似乎没有在文档中出现,或者至少不容易找到)。然而,从逻辑上讲,DB 对 CLOB 的处理工作更多。它必须决定是否直接返回结果中的 CLOB。这至少需要一些开销。这里有一个很好的讨论,涉及到一些问题,但也没有明确回答性能问题。

我的默认立场是,除非确实需要使用 CLOB(列中的数据可能大于 VARCHAR 限制),否则应该使用 VARCHAR


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接