如何检查 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到数据库。
我正在使用 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到数据库。