代码之家  ›  专栏  ›  技术社区  ›  BC.

非唯一列上的聚集索引插入性能?

  •  1
  • BC.  · 技术社区  · 17 年前

    根据您的经验,当在通常不唯一的列上使用聚集索引时,大约有多少条记录的插入性能变得无法忍受?

    我经常读到聚集索引应该为唯一值的列保留,但是如果问题中的表最常被这个索引查询,该怎么办?

    2 回复  |  直到 17 年前
        1
  •  2
  •   Sam Saffron James Allen    17 年前

    您应该始终保持聚集索引的唯一性。对于具有大量插入的表,像int标识之类的内容是一个不错的选择,因为插入的页面通常位于内存中,从而减少了磁盘访问。

    如果不使聚集索引唯一,SQL server将为您执行此操作,因为它仍然需要能够以某种方式找到特定的行。维护uniquifier需要花费一些钱。

    因此,如果您希望comments表上的聚集索引成为post id,该怎么办呢?这非常有用,因为查找post的所有注释变得非常快,所有信息都位于磁盘上的同一区域。

    没有问题,通过添加更多列使索引唯一:例如:

    create unique clustered index pk_comment(post_id, comment_id)  
    

    但是拥有此索引意味着您的索引不再单调递增,这可能会影响插入性能。它还可能影响页面拆分的数量。

        2
  •  2
  •   Mitch Wheat    17 年前

    • 行的大小
    • 填充因子(即索引中的剩余空间)

    你应该根据你的具体情况来设定基准。