gpt4 book ai didi

Hibernate 没有使用索引

转载 作者:行者123 更新时间:2023-12-03 08:11:18 28 4
gpt4 key购买 nike

我一直在对我的应用程序进行性能调优。它基于 Spring,使用 hibernate 4.2.19.Final。数据库是DB2

在数据库中有表 CUSTOMER,上面有很多字段。其中 2 个是 status 和 surname,这 2 个列包含在一个索引中。

Hibernate/Spring Data repository 生成以下语句并且它使用索引:

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

如果我从任何数据库客户端工具执行以下操作,它将使用索引

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

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

我正在使用 db2explain、db2top、IBM Data Studio 来验证索引没有被 hibernate 使用。

有人知道解决这个问题的方法吗?或者我是否必须在此场景中避免使用 hibernate/ Spring 数据,并进行自定义查询?

最佳答案

是否使用索引的决定可能是由 DB2 而不是 Hibernate 做出的。我对它为什么不使用索引的最佳猜测是因为列 status has low cardinality。在那种情况下,DB2 可能会认为表扫描实际上可能更快。

http://www.ibm.com/developerworks/data/library/techarticle/dm-1309cardinal/

关于Hibernate 没有使用索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29736708/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com