我们正在使用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'创建快速查询?