【问题标题】:How to improve SQL Server cursor performance without rewriting any code?如何在不重写任何代码的情况下提高 SQL Server 游标性能?
【发布时间】:2013-10-31 10:11:21
【问题描述】:

我有一个基于 Microsoft SQL Server 的第三方应用程序,即使是简单的选择查询也使用游标。它看起来像 .exe 文件,我无法更改任何内容。

我的问题是:我可以从 SQL Server 数据库管理员端以某种方式提高此应用程序的性能吗?更改一些 SQL Server 配置参数等。

换句话说:DBA 能否在不更改应用程序源代码的情况下提高游标性能?

更多信息和示例。

我有一个像这样的非常简单的查询(我从 SQL 跟踪中得到它)。

select id, name from my_table

idname 列有索引。 my_table 有 700 000 条记录。

如果我在 SQL Server Management Studio 中运行它,它会立即返回第一个结果并在 7 秒内获取所有结果。

但此第三方应用程序仅在 7 秒后返回第一个结果。我比较了 SQL 跟踪,发现这个第三方应用程序使用游标来运行这个简单的查询并将数据返回到网格。对于这个简单的例子,我不能对索引等做太多事情,执行计划是完美的等等。

【问题讨论】:

    标签: sql-server performance cursor database-administration


    【解决方案1】:

    大概吧。查看查询执行计划,创建索引并尝试再次运行代码几次以获得良好的测量结果。

    通常,最好创建索引并在其中包含用于 where、join、have 子句的列。有很多关于这方面的信息需要阅读,它归结为以我的经验测试和理解执行计划。

    如果您无法更改他们的代码,并且索引已经到位。检查索引的碎片并确保它们是好的,否则可能会每天晚上重新构建它们。

    另外,服务器是否有足够的 ram 内存?这样它就可以将所有日期存储在内存中而不是磁盘上?

    【讨论】:

    • 对不起,我在问题描述中添加了更多信息和示例。我不能对索引、执行计划等做太多事情。它是关于程序如何运行 SQL 查询的。
    • 我在回答中添加了一些东西,我想到的东西可能会有所帮助。
    • 我会检查索引碎片。谢谢你。关于“内存中的所有数据”,我认为这对我来说可能很困难,因为数据会增长。但是你是指什么样的数据?只有一张表,只有一个数据库还是什么?可能我只能将临时数据库放入内存,但是在使用游标的情况下会有所帮助吗?
    猜你喜欢
    • 2015-07-01
    • 2010-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多