我们有一张大约有100,000条记录的表格,在我们的应用程序中经常使用。我们有一个标识(ID)列,并在其上有一个聚集索引,一切都很好。但由于某些原因,我们不得不使用Uniqueidentifier列作为主键。因此,我们在其上添加非聚集索引并删除ID列上的聚簇索引。但现在,我们在高峰时期会从客户那里获得大量性能下降。是因为表现在没有聚集索引吗?
答案 0 :(得分:2)
您添加主键的事实绝不意味着您必须删除聚簇索引。这两个概念是截然不同的。您可以拥有由非聚集索引和单独的聚簇索引(例如旧ID
列)实现的uniqueidentifier PK。
但真正的问题是当你添加uniqueidentifier PK 时,你是如何更改你的应用程序的?您是否还修改了应用程序代码以通过此新PK(由uniqueidentifier)检索记录?您是否更新了所有联接以引用新PK?您是否修改了引用旧ID
列的所有外键cosntraints?或者应用程序是否继续使用旧标识ID
列检索数据?我的期望是你改变了两个应用程序和表格,现在访问权限在SELECT ... FROM table WHERE pk=@uniqueidentifier
的形式上很普遍。如果仅发生此类访问,则即使使用非群集uniqueidentifier主键且没有聚簇索引,该表也应执行OK。所以必须有其他的东西在发挥作用:
ID
列ID
列ID
列最终,您手头有性能故障排除问题,并将其视为性能故障排除问题。我有两个很棒的资源: Waits and Queue methodology和Performance Troubleshooting Flowchart
答案 1 :(得分:1)
您好我认为您可以使用NEWSEQUENTIALID()而不是NEWID()将uniqueidentifier列设置为聚簇索引。由于newsequentialid生成顺序ID,因此聚簇索引最好。