如何检查 Hibernate 在加载数据时是否正在使用数据库索引

How to check if Hibernate is using a database index while loading data

我正在使用 Java、Sybase ASE 和 Hibernate 4.1.2。在我的项目中,从 table 加载一些数据需要相当长的时间。我怀疑 Hibernate 查询没有使用索引。但我不知道如何验证它是否在 table 上使用索引?请帮助

我认为您可以在实体 class 中指定一个索引。这通常是用外键列完成的。

E.G :如果你有如下外键列,

public class Project
{
...
    @ManyToOne(cascade = CascadeType.ALL)
    @JoinColumn(name="user")
    private User user;
...
}

您可以指定一个索引如下。

@javax.persistence.Table(name = "project")
@Table(appliesTo = "project" ,indexes = @Index(columnList = "user", name = "user_index"))
@Entity
public class Project
{
 ..

注意:您也可以为非外键列指定索引。

希望对您有所帮助。

您需要启用查询加载,获取您感兴趣的查询并查看 execution plan Sybase 为您提供的内容。

您还需要考虑绑定参数值,因为这也可能会影响执行计划的生成。

你也可以supply index hints with Sybase, and JPA also defines a portable API for giving index hints到数据库。