知识大全 实践证明在数据库中使用游标效果会更好
Posted 语句
篇首语:眼前多少难甘事,自古男儿当自强。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 实践证明在数据库中使用游标效果会更好相关的知识,希望对你有一定的参考价值。
在数据库中有两个表 一个比较巨大 大约 千万条记录(表Big) 另一个只有 条(表small)
目前需要根据表small来更新表Big
UPDATE Big SET Bf = WHERE BigId IN(SELECT BigId FROM Small WHERE Sf > )
但是这样执行下来 速度非常慢 并且连接使用这台DB服务器的程序也都慢了下来 几近不可用
仔细分析这条SQL语句 使用了IN 有人说IN是会分拆成一个个OR表达式的 而OR语句将不会使用索引 所以有时候遇到OR 会用UNION ALL来代替
但在这里用UNION ALL是不行的
根据笔者的猜想 这条SQL语句大概会用上全表搜索 大表 千万条记录 那么至少比较 千万次 怎么会不慢呢
于是选择改用游标 先将小表的记录提取出来 然后一条条的跟大表结合执行
DECLARE curT CURSOR FOR SELECT BigId FROM Small WHERE Sf > ; DECLARE @Id INT; OPEN curT; FETCH NEXT FROM curT INTO @Id; WHILE @@FETCH_STATUS = BEGIN UPDATE Big SET Bf = WHERE BigId=@BigId; FETCH NEXT FROM curT INTO @Id; END CLOSE curT; DEALLOCATE curT;
这样游标里的记录数量最多也只会有 条 BidId在大表里又有索引 分成 次执行 虽然在连接编译时花了一些时间 但与恐怖的巨大表全表搜索比较 是微乎其微
cha138/Article/program/SQL/201311/16209相关参考
Oracle数据库编程:在PL/SQL中使用游标获取数据 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下
在定义此类游标的情况下S锁是必须下的NOLOCK提示并不会起作用此现象通过查询游标OPEN时的sp_lock信息就可以观察得到它产生了IS和S锁 而NOLOCK提示是否起作用会影响的执行的结果(
知识大全 oracle中ora-0100错误打开游标过大的解决
最近做项目碰到ORA错误参考了一些解决办法把自己解决问题的一些心得写下来java访问oracle数据库在for循环代码中如果忽略关闭createstatment或preparedstatement
用一个实例讲解DB2数据库游标循环的问题 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 本文中的
游标是构建在PL/SQL中用来查询数据获取记录集的指针它让开发者一次访问结果集中一行记录 在oracle中提供了两种游标静态游标ref游标 静态游标静态游标是在编译的时候就被确定然后把结果集复
Oracle数据库游标的类型 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 游标是SQL的一个内
快速掌握Oracle数据库游标的使用方法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 显式游标
Oracle数据库游标使用大全 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! SQL是用于访问O
它将冗余数据选择到一个游标中并根据(LastNameFirstName)来分组(在我们这个方案中)然后打开游标然后循环地取出每一行然后用与先前的取出的键值进行比较如果这是第一次取出这个值或者这个值
在下面的示例中表className中有如下分类 具体示例 classIDclassName 衣服 裤子 帽子 鞋子 表productInfo有如下记录 productIDprodu