赛迪网 > IT技术 数据库 > 精彩更新
  IT资讯搜索
 
IT产品搜索
[程序开发][网管世界][网络安全][数据库技术]
[操作系统][嘉宾聊天·在线访谈][活动集锦]
[精彩专题][Symantec专区][订阅IT技术周刊]
[开发论坛][网管论坛][安全论坛][数据库论坛]
[操作系统论坛][Sybase专区][IBM dW技术专区]
[病毒求助][病毒与漏洞播报][文档·源码下载]

实例介绍:不可小视视图对效率的影响力

发布时间:2007.08.10 05:11     来源:赛迪网    作者:wy

近日为一家企业开发数据库方面的应用。

有两张数据表:A和B,其中A的记录为2万条左右,而B中的数据为200万条以上,现在要求以a.id=b.id为关联进行数据筛选。

为此要求,我做了个视图View1,将a.id与b.id关联起来,运行该视图的查询,使用了2秒中就得到结果了。

这时又有一特殊需求:编写存储过程,该存储过程中有一个游标的循环,该循环重复1万次,在每次循环中都使用了对View1的查询。

举例如下:

循环游标体(重复1万次)

{ select @text=text from view1 whereid=@id 
--其中@text,@id均为变量

update form1 set text=@text where id=@id}

执行以上的存储过程,发现竟然要花费>7分钟的运算时间,进行分析后得知效率全损耗在对view1视图的扫描上,尽管单独对该视图进行查询只需2秒,但在这种情况下即需要太多的时间。

因此改进该存储过程如下:

create table #tempTab( id nvarchar(20), text nvarchar(20))

查询View1视图,将记录插入到#tempTab临时表中... 循环游标体(重复1万次)

{ select @text=text from #tempTab whereid=@id 
--其中@text,@id均为变量

update form1 set text=@text where id=@id}

别小瞧以上的改动,此时该存储过程只花费50秒的时间。 对于上述现象,分析如下:在多次循环对某个视图进行查询时,将会耗费大量的时间,因此将该视图的数据放在内存中进行计算会在很大程度上提高速度。 (责任编辑:卢兆林)


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
· 轻松了解:数据库事务隔离级对锁的影响 (08-03) · 一个用配制文件连接数据库的Java工具类 (08-02)
· SQLServer悲观锁定和乐观锁定应用实例 (07-30) · Java多媒体框架设计自动播放机实例详解 (07-25)
· JAVA对象序列化保存为XML文件的工具类 (07-23) · Java中利用JMF编写摄像头拍照程序实例 (07-19)
· Spring框架下实现基于组的用户权限管理 (07-18) · 用JSP实现数据库图片的存储与显示实例 (07-18)
· 实例讲解Java语言利用搜索引擎收集网址 (07-17) · 使用AJAX+J2EE实现一个网上会议室系统 (07-13)
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
  赛迪推荐  
  手机·资费 ·新品·导购·评测·手机资费·宽带
手机搜索  诺基亚 N73 MOTO Z6
  IT产品 ·笔记本·台式机·服务器·打印·投影
IT产品搜索 
  IT技术 ·开发·网管·安全·数据库·操作系统
  信息化 ·热点·专题·访谈·周刊·方案案例
[政务][电信][金融][农业][制造业][中小企业]
[CIO][ERP][协同][IT管理][中间件][电子商务]
[政策][地方][专家][评估][辞典][博客][社区]
· 专题:一路畅通构想曲——让出行不再遭遇堵车
· CIO工作亲历:企业ERP选型不能忽视"选人关"
· 综述:信息化建设给中国监狱带来的各种变化
· 金融业风险管理和法规遵从有五点需考虑的因素
· 保险业CIO关注:该如何建立统一高效的CRM体系
· 调查显示:多数CIO对IT规划仍存在困惑和误解
  博客·论坛 ·曾剑秋·项立刚·Java学习·网管