有很多关于索引列顺序的文章,我明白了。但是,我没有找到关于唯一索引的信息。
简单示例:Product
和Category
表使用ProductCategoryMapping
表与3列具有nn关系:identity Id
,ProductId
和CategoryId
如果我创建一个包含2列的唯一索引UN_ProductCategoryMapping_Product
:ProductId
和CategoryId
,我是否还应该以相反的顺序创建另一个唯一索引,假设我有时想“列出所有产品类别“,有时”列出产品所属的所有类别“?
在这种情况下,SQL Server是否足够智能以进行优化?
答案 0 :(得分:2)
唯一性并不依赖于列顺序。如果您声明第1列,第2列和第3列的组合是唯一的,而其他人声明第2列,第1列和第3列的组合是唯一的,那么您将说明相同的事实。
但这并不是说所有索引都是平等的,或者同样有用。如果您可以使用所有最左侧的列,则索引仅(可能)有用。如果您的查询没有使用任何索引的最左侧列,则满足查询的唯一方法是扫描整个表。