Sqlserver 游标 慢
来源:互联网 发布:抓包软件有哪几种 编辑:程序博客网 时间:2024/05/17 05:10
.net项目中有个模块做统计功能,原先方法速度很慢,所以需要改进,统计结果如下图:
下图接上图后面:
原先的处理方式是,这些数据分别涉及到四五张表,前台从数据库中查询出需要的数据集,然后分别遍历这些数据集拼接html字符串显示在界面上。
优化思考:
由于前台需要多次调用数据库,试想把改功能封装成一个存储过程实现,前台负责传输参数,有存储过程计算拼接之后返回html结果。
其实对于这样统计为什么会要通过遍历多个数据集去拼接字符串呢?为什么不通过数据库关连查询出来这个结果呢?其实开始想过使用行列转换去实现,刚好sqlserver 2005中有pivot实现行列转换,但后面使用之后发现,实现转换的那列需要是数字类型(INT),而我们的结果备注这列都是字符型的,而且类似C3列的结果可能不唯一,比如多个值时应该出来21;22,所以使用行列转换解决不了。
最后编写存储过程算法完全跟前台一致,原先遍历表存储过程使用游标去遍历,最后测试结果让人失望,竟然超时,比原先的调用方式还慢,查查原因,原来都是游标惹的祸,原来用游标遍历大批量数据会超级慢。
解决办法一:
用表变量方式代替游标,类似如下:
DECLARE @t TABLE (ph VARCHAR(20), tdate VARCHAR(6), qty NUMERIC(18), rownum INT ) DECLARE @i INT,@rownum int INSERT INTO @tSELECT ph,tdate,qty,ROW_NUMBER()OVER(ORDER BY ph) FROM tb_a SELECT @rownum=@@ROWCOUNT,@i=1 WHILE @i<=@rownum BEGIN SELECT * FROM @t WHERE rownum=@i SET @i=@i+1 END
- Sqlserver 游标 慢
- SQLserver--游标
- sqlserver游标
- SQLServer游标
- SQLSERVER 游标
- sqlserver游标的使用
- sqlserver 游标全面解说
- sqlserver游标体验
- sqlserver 游标全面解说
- SqlServer游标示例
- SqlServer 游标例子
- SqlServer游标理解
- sqlserver游标使用
- SQLServer 游标讲解
- SqlServer游标例子
- SQLServer中使用游标
- SQLServer游标使用
- SqlServer游标例子
- 第14章——C++的代码重用
- 使用JDBC如何获取数据库自动生成的主键
- Java编程解析节省内存效率高的方法
- 5.3例题--日历问题--2964
- 最近时间安排
- Sqlserver 游标 慢
- Evernote推出Clearly:让您享受阅读(含视频)
- 前端脚本爱好者
- python 解码js escape,encodeURI
- JVM内存管理:深入Java内存区域与OOM、深入垃圾收集器与内存分配策略
- Struts标签-Logic(转载)
- 如何从应用跳到桌面
- 编译jrtplib和jthread
- Android系统的Binder机制分析