请教关于set rowcount性能的问题

SeaBirds 2008-04-21 11:24:56
最近发现我们的系统在做一个查询时很慢,

后来通过SQLSERVER的事件跟踪发现这一语句要7-8分钟才返回结果,但把这语句拿到查询分析器里执行10秒内就能返回结果

最后发现是程序在这语句前执行了 set rowcount 100的操作

把这句加到查询分析器里一同运行,发现返回这100条数据也要7-8分钟了(结果应是8000多条记录,在一个3000多万条记录和另一个几千条记录的表中关联查询)


并发现一个问题就是如果查询条件(SQL语句不变,只是变量变一下)让返回结果只有很少的话,加不加set rowcount 都能很快返回结果


请问这个问题大家有没有见过,如何解决?

另:应系统程序是不能变的,所以只能从数据库上着手了

看到网上说SET ROWCOUNT和TOP N是有性能差别,但我这种从几秒到几分钟的别就太大了吧,通否通过INDEX优化来解决?(我对3000万记录的表做了查询时用到几个字段的INDEX,但没有效果,是否是我INDEX建得不对)
...全文
227 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
SeaBirds 2008-08-29
  • 打赏
  • 举报
回复
可能是同SQLSERVER本身处理有问题,可能表关联后达到他最大处理量了
SeaBirds 2008-04-21
  • 打赏
  • 举报
回复
刚试了一下,加上TOP 100来查询一样的慢,请帮忙分析一下
flairsky 2008-04-21
  • 打赏
  • 举报
回复
你不能改代码,索引看上去又没什么问题

这个问题怎么解决,你问我,我问谁去……
SeaBirds 2008-04-21
  • 打赏
  • 举报
回复
原因就是因为系统是别人做的,已比较老了,不能更新,所以我改不了TOP

我到查询器用TOP试一下看看

如果TOP快,那这问题应如何办呀?
还请各位指点一下,不然这系统就问题大了
dawugui 2008-04-21
  • 打赏
  • 举报
回复
SET ROWCOUNT
使 Microsoft® SQL Server™ 在返回指定的行数之后停止处理查询。

设置 SET ROWCOUNT 选项将使大多数 Transact-SQL 语句在已受指定数目的行影响后停止处理。这包括触发器和 INSERT、UPDATE 及 DELETE 等数据修改语句。ROWCOUNT 选项对动态游标无效,但限制键集的行集和不感知游标。使用该选项时应谨慎,它主要与 SELECT 语句一起使用。


如果行数的值较小,则 SET ROWCOUNT 替代 SELECT 语句 TOP 关键字。

SET ROWCOUNT 的设置是在执行或运行时设置,而不是在分析时设置。

昵称被占用了 2008-04-21
  • 打赏
  • 举报
回复
因为不加set rowcount 100可以很快返回,说明索引应该没问题
昵称被占用了 2008-04-21
  • 打赏
  • 举报
回复
用top 100试过没有?

dawugui 2008-04-21
  • 打赏
  • 举报
回复
用TOP N好些.
liangCK 2008-04-21
  • 打赏
  • 举报
回复
这个..不知道..ms好像推荐使用top N
panxuan 2008-04-21
  • 打赏
  • 举报
回复
分页用ROWCOUNT。

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧