我们有一个表,其中包含一个由三个字段组成的复合主键(它在MySQL 5.1中).此表上每秒有近200个插入和200个选择,表的大小约为100万行,并且正在增加.
我的问题是:"复合主键"是否会降低此表上的插入和选择的性能?
我应该使用简单的自动增加INT ID字段而不是复合主键吗?(我认为答案与MySQL处理多列索引的方式有很大关系)
@Entity
public class Person {
@ElementCollection
@CollectionTable(name = "PERSON_LOCATIONS", joinColumns = @JoinColumn(name = "PERSON_ID"))
private List<Location> locations;
[...]
}
@Embeddable
public class Location {
[...]
}
Run Code Online (Sandbox Code Playgroud)
给定以下类结构,当我尝试将新位置添加到Person的位置列表时,它总是会导致以下SQL查询:
DELETE FROM PERSON_LOCATIONS WHERE PERSON_ID = :idOfPerson
Run Code Online (Sandbox Code Playgroud)
和
A lotsa' inserts into the PERSON_LOCATIONS table
Run Code Online (Sandbox Code Playgroud)
Hibernate(3.5.x/JPA 2)删除给定Person的所有相关记录,并重新插入所有以前的记录,再加上新记录.
我认为Location上的equals/hashcode方法可以解决问题,但它没有改变任何东西.
任何提示都表示赞赏!