【问题标题】:Impact for increasing the column length of an existing table对增加现有表的列长度的影响
【发布时间】:2010-11-17 14:15:05
【问题描述】:

现有表中列的数据类型是 Char(4) 类型。现在,如果我将列长度增加到 10,那么在选择该行时会不会有任何影响。

【问题讨论】:

    标签: database oracle performance


    【解决方案1】:

    我相信当你增加一个 char 字段时,会添加额外的空格来填充那些尚未填充的空间,如果不是全部的话,在某些数据库中。

    这可能会影响一些没有预料到这种行为的程序,如果没有修剪额外的空白,可能会导致一些输出问题。

    我假设类似子字符串的函数(以及那些取决于字符串长度的函数)也可能会受到影响,因为您的字符串的长度现在已经改变了。

    【讨论】:

      【解决方案2】:

      为什么不使用 varchar2(10)?你真的对每条记录都使用了整个字符串吗?

      【讨论】:

      • 好的.. 即使我将其更改为 Varchar(10),也可以。我只是想知道对使用 Oracle 内置 fns(如 substr()、instr() 等)是否有任何影响。我没有看到任何影响。但想在批准之前确认。
      • 如果你能衡量任何影响,我会感到震惊。只需一次调用...前滚很容易,回滚则不那么容易。
      【解决方案3】:

      在真空中,在列上扩展 VARCHAR2 数据类型应该没有真正的影响。

      与右侧填充空白的 CHAR 不同,较大的 VARCHAR2 大小不会显着更改任何现有记录。

      但是,正如其他人所提到的,我们无法预测的是您在数据库顶部的任何层会发生什么,这可能依赖于特定大小的列,但我相信您可以比我们更好地回答这个问题.

      不过要小心,让 VARCHAR2 列再次变小并不容易。即使您的数据在新的限制范围内,Oracle 也会坚持该列为空。最好的办法是导出行并重建表或洗牌(创建新列、迁移值、删除旧列)。

      【讨论】:

        【解决方案4】:

        “选择该行时”

        在这些情况下,您可能遭受的唯一影响是意外截断。我记得有一次问我公司的 DB2 专家,指标值“-2”是什么意思。他不知道。

        但是,如果您在任何地方遇到任何涉及“LENGTH(yourcolumnname)”的查询,结果证明您的代码依赖于该 LENGTH() 调用永远不会返回大于 4 的值,那么您当然有麻烦了。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-11
          • 2018-12-02
          • 2020-02-18
          • 1970-01-01
          • 1970-01-01
          • 2011-08-11
          相关资源
          最近更新 更多