繁体   English   中英

关于Oracle和索引使用情况的PreparedStatement

[英]PreparedStatement on oracle and index usage

我在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%' (无法从索引获得性能优势)。

所以,我的问题是:

  1. 我应该改为使用Statement吗? 如果是这样,转义输入参数的最佳方法是什么(因为它将来自AJAX请求)
  2. 有什么我可以用来使PreparedStatement使用索引的东西吗?

我认为,准备好的语句会更好,因为服务器端的解析将更少,因此“闩锁:库缓存”也会更少。

SELECT /*+ INDEX suppliers(supplier_name_upper_idx) */ * from suppliers ....应该使语句使用索引“ supplier_name_upper_idx”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM