【发布时间】:2015-04-19 22:39:44
【问题描述】:
我一直在对我拥有的应用程序进行性能调整。 它基于 Spring,使用休眠 4.2.19.Final。数据库是 DB2
在数据库中有一个表 CUSTOMER,上面有很多字段。 其中 2 个是 status 和 surname,这 2 个列包含在一个索引中。
Hibernate/Spring 数据存储库生成以下语句并且它不使用索引:
select * from CUSTOMER where status=? and surname=?
如果我从任何数据库客户端工具执行以下操作,它将使用索引
select * from CUSTOMER where status='LIVE' and surname='BLAAAA'
主要区别在于,在底层,hibernate 似乎使用带有绑定参数的 PreparedStatement。 IE。 (ps.setString(2, Constants.STATUS.SUSPENDED.name());)
我正在使用 db2explain、db2top、IBM 数据工作室来验证索引没有被休眠使用。
有人知道解决这个问题的方法吗? 或者我是否必须在这个场景中避免休眠/弹簧数据,并进行自定义查询?
【问题讨论】:
-
我不认为 Hibernate 是这里的问题。 DB2 将决定何时使用和索引或不使用和索引这是数据库服务器的功能,而不是 JPA 的功能。
标签: hibernate jdbc db2 spring-data-jpa