繁体   English   中英

这可能会导致在解析关系时进行全表扫描,强烈建议创建覆盖该列的索引

[英]This might cause a full table scan when resolving the relationship, it is highly advised to create an index that covers this column

我在 User 和 Poll 之间存在多对多关系。 在下面创建相关的 class 时,我在编译时收到此警告:

警告:联结实体 com.example.appproject.model.user.UserPollCrossRef 中的列 pollId 正用于解析关系,但它未被任何索引覆盖。 这可能会导致在解析关系时进行全表扫描,强烈建议创建一个覆盖该列的索引。

@Entity(primaryKeys = {"uid","pollId"})
public class UserPollCrossRef {
    @NonNull
    public String uid;
    @NonNull
    public String pollId;

    public UserPollCrossRef(@NonNull String uid, @NonNull String pollId) {
        this.uid = uid;
        this.pollId = pollId;
    }
}

我想问一下这是什么意思,我该如何解决?

看起来 UserPollCrossRef 是一个关联/引用/映射(和其他名称)表,用于用户和轮询之间的多对多关系。

这是什么意思

主键是按照uid和pollid的顺序组合的,所以uid是主键的第一部分,所以查找uid的速度很快。

但是,当/如果搜索 pollid 时,则没有根据 pollid 排序的索引,因此建议创建这样的索引。

您不妨考虑查看https://www.essentialsql.com/what-is-a-database-index/

房间很简单,说在某些情况下索引可能是有益的,它只是一个警告。

我该如何解决?

最简单的方法是使用@ColumnInfo(index = true)例如

@Entity(primaryKeys = {"uid","pollId"})
public class UserPollCrossRef {
    @NonNull
    public String uid;
    @NonNull
    @ColumnInfo(index = true)
    public String pollId;

    public UserPollCrossRef(@NonNull String uid, @NonNull String pollId) {
        this.uid = uid;
        this.pollId = pollId;
    }
}

另一种方法是利用@Entity注释的 indices 参数,例如

@Entity(primaryKeys = {"uid","pollId"},
        indices = {
        @Index(value = "pollId")
        }
)
public class UserPollCrossRef {
   @NonNull
   public String uid;
   @NonNull
   public String pollId;

   public UserPollCrossRef(@NonNull String uid, @NonNull String pollId) {
      this.uid = uid;
      this.pollId = pollId;
   }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM