UNIQUE SQL 索引是否也用于加快搜索速度?

Mar*_*rcG 2 mysql sql database-performance database-indexes

假设有一个“系列值”的 SQL 数据库。每个都Value属于 a Series,并且有一个日期:

@Entity
class Series { … }

Value {
   Series series;
   Date date;
   …
   }
Run Code Online (Sandbox Code Playgroud)

对于系列和日期的每个组合,每个值都是唯一的,由该索引保证:

UkSeries UNIQUE INDEX value (series ASC, data ASC)
Run Code Online (Sandbox Code Playgroud)

在Hibernate中,上面的索引就是通过这个注解创建的:

@Table (
    uniqueConstraints = @UniqueConstraint (columnNames = {"series", "data"}))
Run Code Online (Sandbox Code Playgroud)

现在,请将它与这个可能的替代索引定义进行比较:

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") })
Run Code Online (Sandbox Code Playgroud)

考虑到我还想加快在数据库中搜索值的速度,我的问题是

除了保证唯一性之外,单独的“UNIQUE INDEX”是否也可以用于加快搜索速度?还是我真的需要这两个索引,如上面我的替代索引定义中所示?

注意:我使用的是 MySQL,但我相信这个问题很简单,所以我的特定数据库并不重要。

Alv*_*son 6

这个答案解释了 MySQL 中的唯一约束(就像在大多数 RDBMS 中一样)只是一种特殊类型的索引,因此您不需要两者都需要。唯一约束就行了。