我在Hibernate之上使用Spring Data。 我有一个抽象的类A和一些实现,其中两个与数据库中的大量记录相关联,比方说200k。我正在使用TABLE_PER_CLASS继承策略。 A类与另一个具有两个双数d1和d2的C类有关系。 现在,我想执行一个查询,如findByCD1BetweenAndCD2Between(double minD1,double maxD1,double minD2,double maxD2):
@Repository
public interface ARepository extends
JpaRepository<A, Long>,
JpaSpecificationExecutor<A> {
findByCD1BetweenAndCD2Between(double minD1, double maxD1, double minD2, double maxD2):
}
嵌入我的C类并定义索引:
@Entity
@Configurable
@Embeddable
@Table(indexes = { @Index(columnList = "d1,d2") })
public class C {
private double d1;
private double d2:
}
A类嵌入它:
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
@Configurable
public class C {
@Embedded
private Coordinates coordinates;
/*...*/
}
当我这样做时,查询真的需要几分钟。直接在SQL中执行查询并不需要那么长时间,因为它只需几秒钟。 与条件匹配的记录数量级为100。 如何优化这种情况以便将计算减少到几秒钟?