【问题标题】:Drawback of large LIMIT of VAR-typesVAR 类型的大 LIMIT 的缺点
【发布时间】:2009-07-01 18:06:50
【问题描述】:

将 VARCHAR 或 VARRAY 的最大整数大小设置为明显大于实际需要的值(或将其设置为允许的最大大小)是否有任何缺点(除了允许值或数组变得太大)?

【问题讨论】:

    标签: database oracle database-design varchar varray


    【解决方案1】:

    如果您谈论的是数据库表中的列,建议将 VARCHAR2 的最大长度设置为要求允许的最小长度 - 与任何其他约束一样,它有助于使用数据库以确保仅保存有效数据(例如,如果输入了 1000 个字符的姓氏,我很确定这将是错误的,并且可能会在某处突出显示程序中的错误)。

    在 PL/SQL 方面,您可能有兴趣知道,根据您在 PL/SQL 程序中声明字符串的大小,可能存在内存 (PGA) 使用差异。在内部,有一个 2000 字节的阈值,PL/SQL 引擎在此切换两种不同的内存分配方案。例如以下声明:

    DECLARE v VARCHAR2(2000); BEGIN...
    

    将在用户的内存区域分配 2000 字节,而:

    DECLARE v VARCHAR2(2001); BEGIN...
    

    将仅在分配值时分配内存,并且仅分配保存分配给它的值所需的内存。

    Oracle forum: "VARCHAR2 space allocation"

    【讨论】:

      【解决方案2】:

      只是不要使用可变数组,使用嵌套表。嵌套表可以包含任意数量的元素。

      在表定义中使用 varchar2(4000) 而不是 varchar2(20) 并没有真正的坏处,因为 Oracle 在不需要时不会声明该空间。

      【讨论】:

      • 我正在考虑使用 BINARY_FLOAT 的 VARRAY 来存储具有数万个数据点的原始波形。如果我们决定购买可以更快读取数据的新数据采集设备,这个数字很容易超过十万。我只是想提前计划一下。我只是不知道使用最大尺寸比我现在需要的大得多的 VARRAY 是否会降低效率。
      • 来自上述参考的注释:“您不能依赖嵌套表的顺序和下标保持稳定,因为嵌套表存储在数据库中并从数据库中检索,因为不保留顺序和下标在数据库中。”如果那不打扰你,那就去吧。 VARRAY 也不存储未使用的数组条目,因此具有一个元素的 VARRAY(100000) 不会比具有一个元素的 VARRAY(10) 花费更多的存储空间。
      • -1 因为第二段。 asktom.oracle.com/pls/asktom/…
      猜你喜欢
      • 1970-01-01
      • 2011-08-02
      • 1970-01-01
      • 1970-01-01
      • 2016-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多