【问题标题】:How to check if Hibernate is using a database index while loading data如何在加载数据时检查 Hibernate 是否正在使用数据库索引
【发布时间】:2016-03-25 11:37:14
【问题描述】:

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

【问题讨论】:

  • 您将不得不发布一些代码,并创建表格语句来获得一些展示和说明这个问题。替代方案:试试 DBA 论坛

标签: java hibernate indexing orm sybase


【解决方案1】:

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

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

你也可以supply index hints with Sybase,JPA也给数据库定义了一个portable API for giving index hints

【讨论】:

    【解决方案2】:

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

    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
    {
     ..
    

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

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2012-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-06
      • 2012-10-15
      • 1970-01-01
      相关资源
      最近更新 更多