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

标签 performance oracle hibernate

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

最佳答案

基于函数的索引将是我的选择。只记得:

  • 使用基于成本的优化器。基于函数的索引仅对基于成本的优化器可见,并且永远不会被基于规则的优化器使用。

  • 摘自 this文章。

    关于performance - 如何使用 oracle 数据库加速 hibernate 条件 'ilike queries',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4606612/

    相关文章:

    c# - 在无限循环性能中声明变量类型?

    c++ - 在内存中使用仅文件 API

    java - 编程语言中的堆栈性能

    Oracle 数据库字符集

    java - SQL 语句不适用于 Oracle JDBC

    java - 在Java中,PreparedStatement如何为以下查询工作

    oracle - SQL*Plus 输入 : How do you get input from user into varchar2 variable?

    java - 不正确的 Hibernate HQL/DAO 函数/编码时 Spring Security - 注解

    java - 由 : org. hibernate.QueryException 引起:无法解析内部枚举类的属性

    java - Custom Validation Annotation 引入了ConcurrentModificationException