游标的SQL Server索引

时间:2009-09-15 07:45:04

标签: sql-server indexing cursor

我有一个应用程序,有时运行缓慢,我认为它与数据库游标有关。

没有对应用程序源的任何访问权限,因此我无法控制数据库调用但数据库已打开,因此我可以在需要时添加索引。

问题是我不知道如何加速索引的游标。

游标查询很简单,看起来像

SELECT * FROM table WHERE field1=1 AND field2=2 ORDER BY field3, field4

(表包含大约1M行。有时候还有一个左连接)

如果我直接在SSMS中运行查询,则需要不到一秒的时间,但是当它从游标中的应用程序运行时,可能需要30秒才能获取第一行(使用sql-trace进行验证)。

WHERE和ORDER BY子句中的字段都是单独索引的。

我想field1,field2,field3,field4上的组合索引会使它更快。有没有办法加快速度而不为每个组合和字段顺序创建索引?

(重复一遍:我对应用程序访问数据库的方式没有影响。性能只能通过索引进行调整)

2 个答案:

答案 0 :(得分:1)

我总是做的一件事(如果可能的话)我运行数据库调优顾问。

不要误解我的意思 - 我没有遵循他的所有规则和建议,但这是一种简单的方法,可以看到发生了什么,发生的频率等等。 几个小时(典型的!!!)工作量很好地得到一些基本的“感觉”正在发生的事情。

之后你可以决定是否实施一些建议。即使你在设计方面做得最好 - 这样的检查看起来真正发生了什么(并不总是可预测的),也许你会忘记一些统计数据或者不同的指数可能会有所帮助......

答案 1 :(得分:0)

我将查询更改为使用实际列名而不是SELECT *,然后在field1 = 1和field2 = 2上创建覆盖索引。如果可能的话,我会在field3和field4上放置一个聚簇索引。

如果您使用的是SQL 2005+,请尝试查看CTE而不是游标,或者重构查询以使用临时表。