【发布时间】:2014-11-03 12:13:03
【问题描述】:
我有一个包含超过 70000 条记录的表,如果我选择前 60 行,它会扫描整个聚集索引,执行大约需要 7 到 8 秒。我已经定义了非聚集索引,但那些不起作用下面是详细信息。
聚集索引:ID 非聚集索引:UserTypeId、LocationId 和 CityId
SELECT TOP ( 60 )
UP.Id AS UserId ,
UP.FirstName ,
UP.LastName ,
UP.City ,
UP.ImageURL ,
0 AS ActivityCount ,
UP.IsPublic ,
ISNULL(UP.GemsCount, 0) AS GemsCount ,
ISNULL(UP.PointCount, 0) AS PointsCount ,
ISNULL(UP.FriendsCount, 0) AS FriendsCount ,
FORMAT(UP.LastUpdatedDate, 'MM/d/yyyy HH:m:ss tt','en-US') LastUpdatedDateText,
Neighbourhood,
UP.UserTypeId,
UP.CityId,
UP.LocationId
FROM UserProfiles AS UP
WHERE
UP.UserTypeId = 1
AND UP.LocationId > 0
AND UP.CityId > 0
ORDER BY UP.LastUpdatedDate DESC
【问题讨论】:
-
查询优化器已经确定——基于表的统计信息——全表扫描比使用其他索引更有效。但是,对于 70,000 行的此查询,7-8 秒似乎很长。
标签: sql-server