我有一个后端 SQL Server 数据库。据我所知,聚集索引是最高效的,但它们会按物理顺序排列页面以使其高效。因此,如果它是用户输入的字段,则每次添加新记录时,整个表都需要重新构建。
这不可能高效。那么,在这种情况下,在字段上放置常规索引是否高效?或者您只是不对其进行索引?
答案1
作为一般规则,您实际上只应为身份字段使用聚集索引,而自动编号是最好的,因为它们会不断增加。更新身份列是您应该每千年更新一次的事情,当然不是在应用程序运行时,因此您永远不必通过标准 DML 语句对页面内容进行重新排序。
在这些约束内,聚集索引非常高效,但是正如您所指出的,如果使用不当,它们会严重拖累索引字段上的 DML 语句的性能。
简而言之,不要对用户输入的字段使用聚集索引。
至于非聚集索引,它们可能是一大优势,也可能是一大缺点,这取决于它们的用途。非聚集索引在检索一行或少量行时非常有用,但索引的大小会随着每个字段的增加而增长,因此复杂的多字段索引或只能解析大量行查询的索引至少不会带来好处,而且往往弊大于利。