我们正在将 hibernate 与 oracle (11) 一起使用,并且由于使用了“ilike”(不区分大小写的“like”)而存在严重的性能问题。
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 条件 API 和 'ilike' 创建快速查询?
最佳答案
关于performance - 如何使用 oracle 数据库加速 hibernate 条件 'ilike queries',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4606612/