我在 Oracle 中有一张这样的表:
create table suppliers(name varchar2(100));
其对应的索引为upper(name)
:
create index supplier_name_upper_idx on suppliers(upper(name));
我想通过 AJAX 填充自动完成,从运行 JDBC 查询的 Servlet 获取信息。
这有效:
PreparedStatement ps =
conn.prepareStatement(
"select * from suppliers where upper(name) like ?"
);
ps.setString(1, 'something%');
问题是,据我所知,PreparedStatement
不会使用索引,因为在语句编译时它不知道参数是'something%'
(能够从索引中获得性能优势)还是'%something%'
(不能从索引中获得性能优势)。
所以,我的问题是:
- 我应该改用 a
Statement
吗?如果是这样,转义输入参数的最佳方法是什么(因为它将来自 AJAX 请求) - 有什么我可以用来制作
PreparedStatement
使用索引的吗?