在SQLServerpedia上的选择索引键一文中,我发现了以下几行:
由于表中的数据是根据聚集索引的结构排序的,因此基于 last_name、first_name 的索引的行为方式与基于 first_name、last_name 的索引的行为方式不同。应首先指定最具选择性的列。
为什么?为什么 a,b 上的索引与 b,a 上的索引不同?无论哪种方式,组合的唯一性都保持不变,那么为什么要指定第一个出现较少的那个呢?
在SQLServerpedia上的选择索引键一文中,我发现了以下几行:
由于表中的数据是根据聚集索引的结构排序的,因此基于 last_name、first_name 的索引的行为方式与基于 first_name、last_name 的索引的行为方式不同。应首先指定最具选择性的列。
为什么?为什么 a,b 上的索引与 b,a 上的索引不同?无论哪种方式,组合的唯一性都保持不变,那么为什么要指定第一个出现较少的那个呢?
唯一性是相同的,但文章提到了行为。想想电话簿。如果您正在寻找 John Smith,首先找到姓氏 = Smith 会更容易,然后缩小到名字 = John。试着用另一种方式来做......找到所有的约翰,然后找出哪些是史密斯?
因此,如果您通常按姓氏搜索人,则按姓氏然后名字对索引进行排序是有意义的。这样,所有相同的姓氏都将位于同一组索引页上。
这显然适用于唯一索引和非唯一索引。无论顺序如何,都会强制索引键列的唯一性。另请记住,您并不总是需要所有列都成为键的一部分 - 有时将它们作为包含列是有益的。
我也不认为您的索引在这种特定情况下应该是唯一的,因为您不太可能有能力阻止两个约翰史密斯注册您的时事通讯,或在您的公司工作,或加入您的战斗club - last/first 不是一个好键。