Oracle 如何设置不区分大小写查询(索引,全表扫描)?
最近从 MSSQL 转移到 oracle,自己草草学习了下,还真不简单。
感觉还挺喜欢 oracle 的,不过这个大小写区分查询,也着实坑了爹。
查阅了一下,方法有:
1、
SQL code
CREATE INDEX I_emp_ENAME ON emp(UPPER(EName));
坑爹的是查询一定要使用
SQL code
SELECT * FROM emp WHERE UPPER(ENAME) = 'ALLEN'
如果不使用“UPPER(ENAME)”,就不让使用索引查询了……
2、还有一种是每次连接都在会话中更改。这点也坑爹。
请问有其他办法吗?可以使用索引:
SQL code
CREATE INDEX I_emp_ENAME ON emp(EName);
也不用处处加 UPPER 或 LOWER 函数。
------解决方案--------------------你这个1用的是函数索引,当然只有用该函数时才会走该索引咯。
同从mssql刚转oracle,一起学习吧。
这个函数索引就是为了mssql那种只要一用函数在左边就杯具的辅助功能而已吧,一般还是不会用的
------解决方案--------------------你可以ENAME都只让存大写或者小写,不就完事了。
------解决方案--------------------
1.因为你建立的函数索引,所以你查询时当然要使用upper函数,才会走索引啊。
如果建立的是普通索引,就不需要每次转换了啊。
2.删除原来的函数索引,建立新的普通索引。
------解决方案--------------------