更改Oracle DB中字段的数据类型是否会影响性能

更改Oracle DB中字段的数据类型是否会影响性能,oracle,Oracle,我需要将一个数字(3)字段更改为Varchar2(3)字段,java程序与DB通信,我们希望区分01和1,这是更改的原因。我们担心这会影响Oracle的索引和性能。我不是Oracle DBA,因此我对性能相关领域一无所知 提前感谢Number(3)需要3个字节,Varchar2(3)需要3个字节,因此记录将保留在相同的块中,因此: 如果您的列没有索引,那么索引就可以了。若列被索引,那个么无论如何都应该重新创建索引 为了尽量减少脱机时间,您可以使用CTA/重命名aproach: create ta

我需要将一个数字(3)字段更改为Varchar2(3)字段,java程序与DB通信,我们希望区分01和1,这是更改的原因。我们担心这会影响Oracle的索引和性能。我不是Oracle DBA,因此我对性能相关领域一无所知

提前感谢

Number(3)
需要3个字节,
Varchar2(3)
需要3个字节,因此记录将保留在相同的块中,因此:

如果您的列没有索引,那么索引就可以了。若列被索引,那个么无论如何都应该重新创建索引

为了尽量减少脱机时间,您可以使用CTA/重命名aproach:

create table new_table as select ... from old_table
在新的_表上构建所需的任何索引 然后 将新_表重命名为旧_表

相关视图/过程将重建并重新加载到共享池


如果您的表接近10亿,那么是时候获得DBA:)

我们无法回答这个问题。我们不可能知道您使用的语句在运行时是否包含隐式数据转换。为什么不在测试数据库中更改并测试它呢?真正的问题是为什么必须更改类型?如果它真的是一个数字,你应该能够建模并使用它。如果是字符串,则不必转换。可以对varchar列进行索引。听起来我的建议不正确。我已经编辑了这个问题@nvoigt@duffymo谢谢还有一点需要澄清-现有数据是否会转换为多个并存储为varchar2,还是每次我查询时都会进行内部转换?此表有多少条记录?列中的值所需的存储不是由定义的长度决定的,而是由列中存储的实际值决定的。如果编号(22)和编号(3)存储相同的值,则编号(22)将占用与编号(3)相同的空间量。根据字符集和其中的数据,
varchar2(3)
实际上最多可以使用9个字节。Hmm。。同意,只考虑英语是很容易的。但是如果它们只存储数字,它们会超过3个字节吗?