2015-04-19 62 views
1

我一直在做我的应用程序的性能调整。 它是基于Spring的,使用hibernate 4.2.19.Final。和数据库是DB2休眠不使用索引

在数据库中有表CUSTOMER上有许多字段。 其中2个是状态和姓氏,这2列包含在索引中。

休眠/春数据仓库生成以下声明,它使用索引:

select * from CUSTOMER where status=? and surname=? 

如果我做的任何数据库客户端工具之后,它会使用指数

select * from CUSTOMER where status='LIVE' and surname='BLAAAA' 

主要区别在于,hibernate似乎在使用带有绑定参数的PreparedStatement。即。 (ps.setString(2,Constants.STATUS.SUSPENDED.name());)

我正在使用db2explain,db2top,IBM数据工作室来验证索引没有被hibernate使用。

有没有人知道解决此问题的方法? 或者我必须避免在这scenaroi中的休眠/弹簧数据,并做一个自定义查询?

+0

我不认为Hibernate是这里的问题。 DB2将决定何时使用和索引或不使用索引这是数据库服务器的一项功能,而不是JPA的功能。 – Namphibian

+0

一个重要的问题是 - 索引中列的顺序是什么。是的,这有所作为。如果您以其他顺序添加列的新索引,它是否被使用? –

回答

0

休眠真的没有 “干扰” 指标。当框架执行查询时,它将自动从提供的映射和映射中生成SQL,然后将其直接发送到数据库,然后RDMS将确定执行它的“最佳方式”。