Oracle数据库中不区分大小写搜索的性能

Vag*_*lov 5 database oracle search case-insensitive

我的数据库背景位于MS SQL Server端,其中索引和约束中的文本比较不区分大小写(至少在默认情况下).所以,一旦你有一个值"ABC"分配到一个唯一的列,你不能存储第二值"ABC",如果你搜索"ABC" SQL Server将找到"ABC".

借助Oracle的东西是不同的,因此即使在文本列,你可以存储在那里都"ABC"和"ABC",如果你搜索"ABC",你不会得到任何结果唯一索引.

在Oracle 10gR2之前的AFAIK没有办法绕过它,现在可以设置不敏感的比较,因为恕我直言,因为一切都取决于程序员的纪律.

但是,什么是最糟糕的区分大小写的查找是,那些谁重写所有搜索作为UPPER(some_column)=UPPER(some_text)(这是很多讨论线程建议)与表结束扫描,即使有上some_column指数.性能含义是不稳定的:我刚刚在一个有50万行的表上测试了一个简单的搜索,并且使用UPPER函数调用的搜索比仅使用列标识符的搜索花费了20倍,从而确认在执行函数时不使用索引基于搜索.

在Oracle数据库中进行不区分大小写搜索的最标准技术是否真的如此,即使性能不佳,还是应用UPPER/LOWER函数来搜索元素?或者有更优雅的方法来解决这个问题?

cwa*_*ole 7

是的,使用UPPER(some_column)=UPPER(some_text)真的是最好的方法,但你可以创建一个索引UPPER(some_column).这应该可以缓解这个问题.