Oracle Case insensitive index searches

有几种方法来编写’case insensitive’的SQL语句——SQL需要避免全表扫描。如果是Oracle10g R2之前版本,我们需要:
1. 在查询中转换数据,使其大小写不敏感(case insensitive),FBI(Function Base Index)

create index upper_full_name on customer ( upper(full_name));

select full_name from customer where upper(full_name) = ‘SAM HENDRY’;
2. 在存储数据(insert或者update)时,使用触发器完成case insensitive转换(比如使用to_lower,to_upper 内建函数)。
3. 使用 alter session命令
alter session set NLS_COMP=ANSI;
alter session set NLS_SORT=GENERIC_BASELETTER;
select * from customer where full_name = ‘Sam Hendry'

在Oracle 10g R2版本中,引入了使用BINARY_CI BINARY_AI排序来进行case insensitive查询的功能。

初始化参数设置:
NLS_SORT=binary_ci
NLS_COMP=ansi
创建索引:
create index caseless_name_index on customer (nlssort(full_name, ’NLS_SORT=BINARY_CI'))
alter session set nils_sort=binary_ci;
select * from customer where full_name = ‘Sam Hendry’;

Leave Comment