3

使用 IBM DB2 9.7,在 32k 表空间中,假设 10000b(一万字节)长的列非常适合表空间。这两者之间有区别吗?一个优于另一个?

VARCHAR(10000)
CLOB(536870912) INLINE LENGTH 10000

在功能和性能方面是或首选?快速浏览一下两者会发现 CLOB 实际上更通用。所有小于 10000 的内容都存储在 stablespace 中,但是如果需要更大的内容,那也没关系,它只是存储在磁盘上的其他位置。

4

1 回答 1

3

在查询中可以使用的方式有许多限制CLOB

特殊限制适用于导致 CLOB 数据类型的表达式和结构化类型列;此类表达式和列不允许用于:

  • 前面有 DISTINCT 子句的 SELECT 列表
  • GROUP BY 子句 ORDER BY 子句 UNION ALL 以外的集合运算符的子选择
  • 基本的、量化的、BETWEEN 或 IN 谓词
  • 聚合函数
  • VARGRAPHIC、TRANSLATE 和日期时间标量函数
  • LIKE 谓词中的模式操作数,或 POSSTR 函数中的搜索字符串操作数
  • 日期时间值的字符串表示形式。

所以如果你需要做任何这些事情,VARCHAR是首选。

我没有关于性能的明确答案(不幸的是,像这样的信息似乎并没有出现在文档中——或者至少,它不容易找到)。但是,从逻辑上讲,数据库与CLOB. 它必须决定是否CLOB直接在结果中返回。这至少意味着一些开销。这是对一些问题的很好的讨论,尽管它也没有给出关于性能的明确答案。

我的默认位置是使用VARCHAR,除非CLOB确实需要(列中的数据可能大于VARCHAR限制)。

于 2013-04-25T08:54:44.520 回答