如果我在 PL/SQL 存储过程中使用许多 CLOB 变量来存储许多长字符串,是否有任何性能问题? CLOB 的长度也是可变的吗? CLOB 是否有任何已知的限制/缺点而不是使用 varchar2 和 long?
最佳答案
CLOB 的长度是可变的,是的。上限根据您使用的 Oracle 版本和数据库块大小而有所不同。对于 11G,限制是“4G * DB_BLOCK_SIZE 参数的值”(来自 11G PL/SQL Language Reference )。在 PL/SQL 中,VARCHAR2 值限制为 32767 字节。
我没有关于 PL/SQL 中 CLOB 与 VARCHAR2 的相对性能的任何明确信息,并且简短的 Google 也没有返回任何有用的信息。但是,我强烈怀疑 VARCHAR2 总体上比 CLOB 性能更好(对于可以存储在任何一个中的数据),因为它更简单。通过使用 VARCHAR2 编写一次相同的简单程序,使用 CLOB 编写一次,然后每运行 1000 次并比较总运行时间,您可以轻松地设置一个测试来证明这是对还是错。 Tom Kyte 的 Runstats 实用程序在这里提供了很大帮助,并显示了两种方法在 Oracle 资源方面的其他差异。
我的建议是:如果您的数据将超过 32K,那么您 必须 使用 CLOB;如果不是,那么 不要 使用 CLOB,使用 VARCHAR2。
注意:如果对于 所有 大小的字符数据,CLOB 比 VARCHAR2 好,Oracle 可能会使用 deprecate VARCHAR2,就像他们对 LONG 数据类型所做的那样 - 但他们没有。
关于plsql - Oracle PL/SQL : Performance of CLOB data type in PL/SQL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2635581/