怎么解决ORACLE 中 CHAR类型的索引问题

Posted 黄景新

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么解决ORACLE 中 CHAR类型的索引问题相关的知识,希望对你有一定的参考价值。

在很多场景中,都有如下情况

trim(a.colunm1) = trim(b.colunm2)

应该怎么优化呢?

用到 TRIM 的很多原因是某些系统为了提高查询效率,不使用  ORACLE 的特有的,优秀的,且前无古人后无来者定义的  VARCHAR2 ,而是使用 CHAR 类型,写死了字符长度。

因此,在关联查询的时候就郁闷了,新建立的表就使用的 VARCHAR2 ,如果不用 TRIM 去掉 CHAR 类型的空格吧,又没办法匹配,如果用 TRIM 吧,索引又被破坏。

而且,重点是,虽然添加一个TRIM(COLUNM1)索引能提高查找效率,但是也增加了存储空间,并且影响写入效率。

怎么办!!!!怎么办!!!

还好你看了我的文章,因为我的聪明才智,想到了补全空格的方法:

RPAD(A.COLUNM1,字符长度,空格) = B.COLUNM2

这样是否完美解决了呢!

效率还倍儿高!

后来发现这不是我的原创,百度早有了。。。

 

以上是关于怎么解决ORACLE 中 CHAR类型的索引问题的主要内容,如果未能解决你的问题,请参考以下文章

Oracle建个索引都加不进去,和业务量有没有关系

修改oracle字段的数据类型,提示不兼容,怎么解决?

Oracle中实现布尔类型

为啥 oracle 对此查询使用索引跳过扫描?

有啥方法能将oracle中CHAR类型数据中的空格去掉

oracle decimal(10,0)类型强制转换sql char(10) 如何转换