【发布时间】:2016-05-09 10:20:29
【问题描述】:
如果有一个表 UserOrder 带有一个聚集的主键(UserID long,OrderID long)。
constraint PrimaryKey_UserOrder primary key clustered ( UserID, OrderID)
我发现在这个表中插入越来越多的记录(> 1 百万)后,以下计数查询会变得越来越慢。
select COUNT(UserID) from UserOrder where UserID = <some value>
但是,如果我只为 UserID 引入另一个非聚集索引。
create nonclustered index Index_UserOrder_UserID on UserOrder (UserID)
查询会变得更快,因为使用的是新索引而不是主键。
我不确定这个新索引是否真的有助于 COUNT() 的性能。也不知道为什么。
有什么意见吗?
注意:一个用户 ID 可能有数百万个订单。
【问题讨论】:
-
在比较性能之前,请确保对现有索引进行碎片整理并且统计信息是最新的。现有的聚集索引应该足够了。
-
您的表将根据复合 PK 进行排序。您在 UserID 上的非聚集索引将允许对键进行快速二进制搜索
标签: sql-server sql-server-2008-r2 query-performance