我想创建SQL索引以加快速度,例如,在数据库中搜索“系列值”。每个Value
都属于Series
,并且有一个日期:
@Entity
class Series { … }
Value {
Series series;
Date date;
…
}
有数百个系列,每个系列都有数千个值。
我经常进行两种搜索:
1)搜索属于某个系列的所有值(无论其日期)。
2)搜索属于某个系列的所有值以及某个特定日期间隔内的值。
我可以创建两个SQL索引,一个仅在series
列上,另一个在series
和date
列上。使用Hibernate,这将是:
@Table (indexes = {
@Index (name = "idx1", columnList = "series"),
@Index (name = "idx2", columnList = "series, date")
})
我的问题是:如果我创建这两个索引,搜索速度是否更快,或者如果我只创建一个这样的索引,它是否相同:
@Table (indexes = {
@Index (name = "idx", columnList = "series, date")
})
答案 0 :(得分:1)
您只需要两个列的一个索引。
答案 1 :(得分:1)
这两个索引是冗余的,因为第二个索引包含与第一个索引相同的密钥,顺序相同(加上一个附加密钥)。
一般来说,这是一个坏主意,因为它是不必要的冗余(在那里是一种双关语;)所以,只需要使用两个键的索引。
有一些边缘情况,其中两个这样的索引可能有用。例如,如果您有大量数据或等效物处于严重内存受限的环境中,则第一个索引可能适合内存,第二个索引可能不适合。然而,这将是一种非常罕见的情况。更好的解决方案是升级硬件。