为字段添加了索引,但它仍然运行缓慢

时间:2015-09-28 14:24:21

标签: sql-server

我们在SQL Server 2012数据库的表中有10M条记录,我们希望根据条件检索前2000条记录。

这是SQL语句:

SELECT   func_call(t1.id1,t2.id2,SUM(t3.id3))
FROM     table1 t1
JOIN     ----
WHERE    ---
GROUP BY t2.id2
ORDER BY 1 DESC -- Here
LIMIT    10

我在列SELECT TOP 2000 * FROM Users WHERE LastName = 'Stokes' ORDER BY LastName 中添加了非聚集索引,需要9秒才能检索2000条记录。我尝试在同一列上创建带索引的索引视图,但无济于事,大约需要相同的时间。还有什么我可以做的,改善表现吗?

1 个答案:

答案 0 :(得分:2)

使用select *将导致对符合条件的所有行进行键查找(=对于聚簇键的每个值,数据库必须通过聚簇索引进入叶级别才能找到其余的值)。

您可以在实际计划中看到,您还可以检查您创建的索引是否实际被使用(=索引寻找该索引)。如果keylookup是缓慢的原因,那么如果只运行select LastName from ...,选择将会很快。

如果表中只需要很少的列(或者表中没有那么多列),您可以在索引中作为包含的列添加这些列,这样可以加快它的速度。始终在select中指定所需的字段,而不是仅使用select *。