代码之家  ›  专栏  ›  技术社区  ›  adrianm

游标的SQL Server索引

  •  0
  • adrianm  · 技术社区  · 15 年前

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

    没有访问应用程序源的权限,所以我无法控制数据库调用,但是数据库是打开的,所以我可以在需要的地方添加索引。

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

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

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

    (表包含大约1米行。有时也有一个左连接)

    如果我在SSMS中直接运行查询,则需要少于一秒钟,但是当它在光标中从应用程序运行时,需要30秒才能获取第一行(用SQL跟踪验证)。

    where和order by子句中的字段都是单独索引的。

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

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

    2 回复  |  直到 15 年前
        1
  •  1
  •   ManniAT    15 年前

    我经常做的一件事(如果可能的话)是运行db tuning advisor。

    别误会我-我不遵守他的所有规则和建议,但这是一个简单的方法,看看发生了什么,多久发生一次等等。 几个小时(典型的!!!!)工作量是很好的得到一些基本的“感觉”是怎么回事。

    之后,你可以决定是否实施一些建议。即使你在设计上尽了最大的努力-这样的检查看起来是真的发生了什么(不总是可预测的),也许你忘记了一些统计数据或一个不同的索引可以帮助…

        2
  •  0
  •   user114600    15 年前

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

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