@ JPA中的索引:对每个列都建立索引与对所有列都建立索引之间有何区别?

g52tjvyc  于 2022-11-24  发布在  其他
关注(0)|答案(2)|浏览(155)

我有一个实体,我想在JPA中的@Table中使用@Index注解向其添加索引。我希望得到一些关于这两种方法之间的区别的澄清:

@Table(name="people", indexes = {
        @Index(columnList = "name"),
        @Index(columnList = "age")
})

@Table(name="people", indexes = {
        @Index(columnList = "name, age")
})

或者两者结合起来:

@Table(name="people", indexes = {
        @Index(columnList = "name"),
        @Index(columnList = "age"),
        @Index(columnList = "name, age")
})

我的目的是在使用JPA方法(如

peopleRepository.findByNameAndAge(name, age)

也可能只有一个字段

peopleRepository.findByName(name)

如果我想使用上面的JPA方法,我将非常感谢对每种方法的解释,以及某些方法是否比其他方法更好。

ohfgkhjo

ohfgkhjo1#

当你希望索引是唯一的时候,在列列表上创建索引而不是在每一列上单独创建索引是很有帮助的。所以在你的例子中,如果你只允许一个人的名字是X old,那么在列列表上使用唯一索引就是一种方法。如果不是这样,最好在每一列上单独创建索引,因为这足以使选择更快。
PS系列
要知道索引会减慢插入和更新速度,而且会占用存储空间,所以最好只在真正有用的地方使用索引。另一件事是,你可能会重新考虑数据库列中的年龄,最好保留出生日期,这样你就不必重新计算它。

r3i60tvu

r3i60tvu2#

并非所有RDBMS都能以相同的效率处理多列索引:如果说SQLServer、ORACLE和DB2非常聪明,那么MySQL和PostgreSQL就不一定了。无论如何,应该根据用例来决定索引什么和如何索引:应用程序需要什么样的搜索条件?支持UI或报告?相关查询多久运行一次?等等。(认真地索引“年龄”-列-如果有的话-应该是“虚拟”的,不应该存储...)

相关问题