索引中的重复键会导致性能问题。 可以执行步骤来避免这些问题。
如果 索引中允许使用重复键,那么与给定键值匹配的所有条目会分组到列表。 数据库服务器使用这些列表定位与请求的键值相匹配的行。 如果索引列的选择性很高,这些列表通常会很短。 但是如果只有少数唯一值,列表会很长,并可能跨越多个叶子页。
在选择性低(即,相对于行数,不同的值很少)的列上放置索引可能会降低性能。 在这种情况下,数据库服务器不仅必须搜索与该键值匹配的所有行,还必须锁定所有受影响的数据和索引页。 这个过程还会影响其他更新请求的性能。
要更正此问题,可以用具有较高选择性的组合索引代替该低选择性列上的索引。在该索引中,将低选择性的列用作第一个列,将高选择性的列用作第二个列。 数据库服务器必须搜索一些行以定位和应用更新,而组合索引限制了这些行的数目。
您可以用任何第二字段来分散键值,只要其值不发生更改,或者与真实键同时改变。 第二列越短越好,因为它的值将复制到索引中,从而增加索引的大小。