首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

SQL处理集合

Set Processing in SQL

SQL 完全基于集合(Set)来处理数据。对大部分更新或删除操作而言 —— 如果不是针对整个表的话 —— 你必须先精确定义出要处理的记录的集合。这定义了该处理的粒度(granularity),可能是对大量记录的粗粒度操作,有可能是只影响少数记录的细粒度操作。

将一次“大批量数据的处理”分割成多次“小块处理”是个坏主意,除非对数据库的修改太昂贵,否则不要使用,因为这种方法极其低效:

(1)占用过多的空间保存原始数据,以备事务(transaction)回滚(rollback)之需;

(2)万一修改失败,回滚消耗过长的实践。

许多人认为,进行大规模修改操作时,应在操作数据的代码中有规律地多安排些commit

命令。其实,严格从实践角度来讲,“从头开始重做”比“确定失败发生的时间和位置,接着已提交部分重做”要容易得多、简单得多、也快得多。

处理数据时,应适应数据库的物理实现。考虑事务失败时回滚所需日志的大小,如果要为undo保存的数据量确实巨大,或许应该考虑数据修改的频率问题。也就是说,将大规模的“每月更新”,改为规模不大的“每周更新”,甚至改为规模更小的“每日更新”,或许是个有效方案。

总结:几千个语句,借助游标(cursor)不断循环,很慢。换成几个语句,处理同样的数据,还是较慢。换成一个语句,解决上述问题,最好。

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论