如何使用oracle数据库加速hibernate条件'ilike queries'

时间:2011-01-05 16:38:05

标签: performance oracle hibernate

我们正在使用hracle与oracle(11)并且由于使用'ilike'而出现严重的性能问题,不区分大小写'喜欢'。

java / hibernate代码如下:

 c1.add( Restrictions.ilike("address", address) );

导致像

这样的sql语句
 select * from ACCOUNT where lower(ADDRESS_1) = ?

'lower'函数使oracle无法使用导致全表扫描的索引。

我正在考虑向db表引入一个包含小写内容地址的新列。 然后我可以使用:

c1.add( Restrictions.ilike("addressLCase", address.toLowerCase()) );

...但我真的不喜欢将内容存储两次的想法......

然后我考虑用小写

创建一个索引
CREATE INDEX ADDRESS_1_IDX ON ACCOUNT  lower(  ADDRESS_1   )  ;

但这不起作用,因为我无法说服优化器使用此索引......

那么我该如何使用hibernate criteria API和'ilike'创建快速查询?

1 个答案:

答案 0 :(得分:5)

基于功能的索引将是我的选择。记住:

  • 使用基于费用的优化工具。基于功能的索引仅对基于成本的优化程序可见,并且不会被基于规则的优化程序使用。

摘自this文章。