2017-02-15 111 views
1

有很多关于索引列顺序的文章,我明白了。但是,我没有发现关于唯一索引的内容。唯一索引列顺序 - 它很重要吗?

简单的例子:身份IdProductIdCategoryId:使用ProductCategoryMapping表3列具有N-N关系ProductCategory表。

如果我创建唯一索引UN_ProductCategoryMapping_Product 2列:ProductIdCategoryId,我也应该建立在相反的顺序另一种独特的指数,假设我有时会想“列表中选择一个类别的所有产品”,有时“列表中的所有类别一个产品属于“?

在这种情况下,SQL Server是否足够聪明以优化?

+3

如果你有一个电话号码簿,列出每个人的姓氏,名字顺序,如果你想知道每个姓氏的共同点,你认为这会有多大用处? –

+0

这些列顺序中的每一个的唯一索引将有助于支持这些搜索情况中的每一个。 – SqlZim

回答

2

唯一性不依赖列顺序。如果您声明第1,2和3列的组合是唯一的,并且其他人声明第2,1和3列的组合是唯一的,则说明了相同的事实。

但这并不是说所有的指标都是平等的,或同样有用的。索引只有(可能)有用,如果你可以使用他们所有的最左边的列。如果您有一个查询不使用任何索引的最左侧列,则满足查询的唯一方法是扫描整个表。

+0

SQL Server可以决定扫描索引而不是表,因此索引 - 甚至可以用于查询第二个索引列。这通常发生在索引与表(或聚簇索引)相比较小时,并且所需的查找量很少或没有。 –