我正在使用带有hibernate jpa的spring boot创建和更新数据库。
实体看起来像这样
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "schedule_id")
int scheduleId;
@ManyToOne(fetch = FetchType.EAGER, optional = false)
@JoinColumn(name = "event_id_fk")
Event event;
@NotNull
@Column(name = "start_timestamp")
Long startTimestamp;
@NotNull
@Column(name = "end_timestamp")
Long endTimestamp;
实体的SQL看起来像这样。
CREATE TABLE public.tbl_schedule
(
schedule_id integer NOT NULL,
end_timestamp bigint NOT NULL,
start_timestamp bigint NOT NULL,
event_id_fk integer NOT NULL,
CONSTRAINT tbl_schedule_pkey PRIMARY KEY (schedule_id),
CONSTRAINT fk1 FOREIGN KEY (event_id_fk)
REFERENCES public.tbl_event (event_id) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE NO ACTION
NOT VALID
)
该表位于应用程序的核心,并在其他多个表中引用。我正在使用它根据开始和结束日期创建将来的事件及其数据。并且随着每个日期范围的更改,先前创建的事件将被删除并创建新的事件。 但是随着数据集增长到150,000+,删除操作开始花费的时间太长,而插入和选择工作得很好。 例如,表中存在约170,000条记录,而删除约700条记录则需要12分钟以上的时间。
我到目前为止所做的事情...
postgresql-and-primary-key-foreign-key-indexing
我是PostgreSQL的新手,请帮助我改善此表的性能并指导我哪里出了问题。
我的最佳猜测是使用GenerationType.AUTO可以做到这一点。如果我使用了GenerationType.IDENTITY,则该表的性能会更好。在这种情况下,如何在不丢失数据和更改自动增量ID的情况下更新表。如果不是,请提出提高删除性能的解决方案。
预先感谢,如果您有任何疑问,请告诉我。