SQL有没有办法使用Lower而不进行全表扫描

Jac*_*Dev 3 sql database oracle

我目前在我的SQL中使用lower()函数.

根据此线程,在列上使用lower()将导致全表扫描: 避免全表扫描

有没有办法防止这种情况或最小化扫描的影响?我正在使用Oracle 10.

我的Sql:

select * from USER u where lower(u.USERNAME) = lower(?)
Run Code Online (Sandbox Code Playgroud)

muc*_*cio 6

如果您总是使用小案例进行搜索,则可以在大小写降低的用户名上创建索引,就像我在此演示中所做的那样.

这里是我演示的语法:

CREATE TABLE t1
    (username varchar2(4))
;

CREATE INDEX t1_idx ON t1(lower(username));
Run Code Online (Sandbox Code Playgroud)

  • 最好包含语法来做到这一点,而不仅仅是链接到它; 如果SQL Fiddle关闭(或阻止),这个答案就没用多少了.对于基于函数的索引,[链接到文档](http://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_5012.htm#sthref4484)也不会对某些背景造成伤害. (2认同)