我想问问。我有我的超一般实体:
@Data
@NoArgsConstructor
@MappedSuperclass
public class SuperEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@CreationTimestamp
@Column(name = "create_date")
private OffsetDateTime createDate;
@UpdateTimestamp
@Column(name = "update_date")
private OffsetDateTime updateDate;
}
以及从以前退出的一般实体:
@Data
@NoArgsConstructor
@Entity
@Table(name = "base_entity",
uniqueConstraints = {@UniqueConstraint(columnNames = {"first_name", "last_name"}, name = "un_base_entity")})
@Inheritance(strategy = InheritanceType.JOINED)
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@DiscriminatorColumn(name = "entity_type")
public class BaseEntity extends SuperEntity {
@Column(name = "first_name")
private String firstName;
@Column(name = "last_name")
private String lastName;
}
然后,我有另外两个从BaseEntity扩展的实体:
@Data
@NoArgsConstructor
@Entity
@Table(name = "animal")
@EqualsAndHashCode(callSuper = true)
@DiscriminatorValue("animal")
public class AnimalEntity extends BaseEntity {
@Column(name = "owner_name")
private String ownerName;
}
@Data
@NoArgsConstructor
@Entity
@Table(name = "person")
@EqualsAndHashCode(callSuper = true)
@DiscriminatorValue("person")
public class PersonEntity extends BaseEntity {
@Column(name = "country")
private String country;
}
所以,我有三张桌子: base_entity,动物和人。它们中的每一个都有ID. ID在base_entity表中是引用。我应该为动物和人中的I创建索引吗?(我将在表中有很多数据)
UPD:为该实体添加了液化基脚本
databaseChangeLog:
- changeSet:
id: 11-1
changes:
- createTable:
columns:
- column:
constraints:
nullable: false
name: entity_type
type: VARCHAR(31)
- column:
autoIncrement: true
constraints:
nullable: false
primaryKey: true
primaryKeyName: base_entityPK
name: id
type: BIGINT
- column:
name: first_name
type: VARCHAR(255)
- column:
name: last_name
type: VARCHAR(255)
- column:
constraints:
nullable: false
name: create_date
type: TIMESTAMP WITHOUT TIME ZONE
- column:
constraints:
nullable: false
name: update_date
type: TIMESTAMP WITHOUT TIME ZONE
tableName: base_entity
- changeSet:
id: 11-2
changes:
- createTable:
columns:
- column:
name: owner_name
type: VARCHAR(255)
- column:
constraints:
nullable: false
primaryKey: true
primaryKeyName: animalPK
name: id
type: BIGINT
tableName: animal
- changeSet:
id: 11-3
changes:
- createTable:
columns:
- column:
name: country
type: VARCHAR(255)
- column:
constraints:
nullable: false
primaryKey: true
primaryKeyName: personPK
name: id
type: BIGINT
tableName: person
- changeSet:
id: 11-4
changes:
- addUniqueConstraint:
columnNames: first_name, last_name
constraintName: un_base_entity
tableName: base_entity
- changeSet:
id: 11-5
changes:
- addForeignKeyConstraint:
baseColumnNames: id
baseTableName: animal
constraintName: FKgmpyb3wmodpc6y1qrp0jliykf
deferrable: false
initiallyDeferred: false
referencedColumnNames: id
referencedTableName: base_entity
validate: true
- changeSet:
id: 11-6
changes:
- addForeignKeyConstraint:
baseColumnNames: id
baseTableName: person
constraintName: FKgmpyb3wmodpc6y1qrp0jliyks
deferrable: false
initiallyDeferred: false
referencedColumnNames: id
referencedTableName: base_entity
validate: true
发布于 2021-12-23 19:15:17
索引有助于加快查询速度,因此,如果您打算按其中一个列进行搜索,最好创建一个索引。ID是一个很好的候选索引:
在构建web时,apps/services
但是索引占用空间并减慢DML (insert/delete/update语句),所以不要盲目地添加它们。您应该了解应用程序(Hibernate)生成并只添加实际使用的索引的查询。
关系数据库还提供命令来分析查询以及它们将如何执行--这些命令被称为查询计划。如果您看到有些查询比较慢,则可以使用查询计划查找性能问题,并确定要添加哪些索引。
https://stackoverflow.com/questions/70466293
复制相似问题