ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 关于Update语句的调整(7)

关于Update语句的调整(7)

原创 Linux操作系统 作者:husthxd 时间:2005-03-18 00:00:00 0 删除 编辑

各种调整方法的比较


1.         各种调整方法的比较

l         用空间换时间:

思路是通过增加冗余字段,减少中间表的连接从而实现sql语句的优化,效率有所提高。

缺点是需要额外的手段保证冗余字段的正确性,否则会导致不正确的结果发生。

 

l         使用临时表和Merge语句:

思路是增加临时表,把update的结果预先保存到临时表中,并通过改写sql语句使用效率更高的hash连接,最后通过merge语句把中间结果更新到主表上来达到调优的目的。这里要注意是通常情况下需要把exists改写的时候加上distinct以去掉重复记录,。

缺点是需要新增临时表;并且会存在潜在的安全隐患:如果在插入到临时表到执行merge语句之间修改了主表的记录,则会导致不正确的结果发生,但这种错误可以通过锁表的方法避免。

 

l         使用存储过程:

思路是用存储过程中的批量提取特性把中间结果一次性提取到服务器内存中,通过forall语句把中间结果批量更新到主表。与‘使用临时表和Merge语句’方法的不同是前者使用内存保存中间结果而后者使用临时段保存。对于内存充裕而I/O性能低下的系统,可以考虑使用该方法调整。

缺点是如果更新的数据量很大的话会导致out of memory内存溢出错误;其他缺点与‘使用临时表和Merge语句’类似;

 

2.         结论

综观上述实验,使用存储过程调整是最为灵活的一种方式,可以在存储过程完成复杂的业务逻辑后才把结果更新到表中;使用临时表和Merge语句是效率最高的一种方式;在某些情况下,用空间换时间的方法也不失为一种有效的调整方法。

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/6906/viewspace-21740/,如需转载,请注明出处,否则将追究法律责任。

下一篇: 加班,郁闷
请登录后发表评论 登录
全部评论
长期从事政务、金融等行业产品研发和架构设计工作,对Oracle、PostgreSQL以及大数据等相关技术有深入研究。现就职于广州云图数据技术有限公司,系统架构师。

注册时间:2007-12-28

  • 博文量
    1156
  • 访问量
    3625363