在SQLServerpedia的选择索引键一文中,我发现了以下几行:
由于表中的数据是根据聚簇索引的结构排序的,因此在last_name,first_name上构建的索引的行为方式与first_name,last_name上构建的索引的行为方式不同。应首先指定最具选择性的列。
为什么呢?为什么a,b上的索引与b上的索引不同?组合的唯一性在任何一种方式都是相同的,那么为什么要指定一个先发生的那个呢?
答案 0 :(得分:4)
唯一性是相同的,但文章提到了行为。想想电话簿。如果你正在寻找约翰史密斯,那么首先找到姓氏=史密斯要容易得多,然后缩小到名字=约翰。试着用另一种方式做...找到所有的约翰斯,然后找出哪些是史密斯?
因此,如果您通常按姓氏搜索人员,则按姓氏和名字排序索引是有意义的。这样,所有相同的姓氏都将位于同一组索引页面上。
这显然适用于唯一索引和非唯一索引。无论订单是什么,都会强制执行索引键列的唯一性。另外请记住,并不总是需要将所有列都作为键的一部分 - 有时将它们作为包含的列包含在内是有益的。
我也不认为您的索引在这种特定情况下应该是唯一的,因为您不太可能阻止两个John Smith注册您的简报,或在您的公司工作,或者加入你的战斗俱乐部 - 最后/第一次不是一个好关键。