【发布时间】:2017-06-26 19:50:39
【问题描述】:
假设有一个“系列值”的 SQL 数据库。每个Value 都属于一个Series,并且有一个日期:
@Entity
class Series { … }
Value {
Series series;
Date date;
…
}
对于每个系列和日期的组合,每个值都是唯一的,这是由这个索引保证的:
UkSeries UNIQUE INDEX value (series ASC, data ASC)
在Hibernate中,上面的索引是由这个注解创建的:
@Table (
uniqueConstraints = @UniqueConstraint (columnNames = {"series", "data"}))
现在,请将它与这个可能的替代索引定义进行比较:
UkSeries UNIQUE INDEX value (series ASC, data ASC)
IdxSeries INDEX value (series ASC, data ASC)
@Table (
uniqueConstraints = @UniqueConstraint (columnNames = {"series", "data"}),
indexes = { @Index (name = "IdxSeries", columnList = "series, data") })
考虑到我还想加快在数据库中搜索值的速度,我的问题是:
“UNIQUE INDEX”除了保证唯一性外,是否也可用于加快搜索速度?或者我真的需要两个索引,如上面我的替代索引定义中所述?
注意:我使用的是 MySQL,但我相信这个问题很简单,因此我的特定数据库无关紧要。
【问题讨论】:
-
我没有任何特定的 MySQL 知识,但一般来说,那里的第二个索引将是完全多余的。
-
好问题。我很确定答案是您只需要唯一索引,但我不知道 mysql 文档,所以我会让其他人回答。
标签: mysql sql database-performance database-indexes