如果您的数据是唯一的,您应该创建一个UNIQUE索引.
这意味着没有额外的开销,并且在某些情况下影响优化器的决定,以便它可以选择更好的算法.
例如,在SQL Server和PostgreSQL中,如果您使用UNIQUE密钥进行排序,则优化程序将忽略此后使用的ORDER BY子句(因为它们不相关),i.即这个查询:
SELECT *
FROM mytable
ORDER BY
col_unique, other_col
LIMIT 10
将使用col_unique上的索引,并且不会对other_col进行排序,因为它是无用的.
这个查询:
SELECT *
FROM mytable
WHERE mycol IN
(
SELECT othercol
FROM othertable
)
如果othertable.othercol上有一个UNIQUE索引,它也将转换为INNER JOIN(而不是SEMI JOIN).
索引总是包含一些指向行的指针(PostgreSQL中的ctid,MyISAM中的行指针,InnoDB中的主键/独占数),并且叶子在这些指针上排序,因此实际上每个索引叶都是唯一的虽然可能不明显).
有关性能详情,请参阅我的博客中的这篇文章: