`

选择合适的游标类型

 
阅读更多
背景:
定义游标的时候,如果不指定STATIC关键字的时候,则默认定义的游标是动态(DYNAMIC)
动态(DYNAMIC)游标会反映在滚动游标时对结果集内的各行所做的所有数据更改。行的数据值、顺序和成员身份在每次提取时都会更改。动态游标不支持ABSOLUTE提取选项。
因为动态游标会消耗资源去检查基础表的更新,所以对于复杂的查询,且不需要反映基础表更新情况的游标处理中,将游标定义为静态的。另外,还有一种 KEYSET 类型的游标,它的行为介于动态和静态游标之间。
在笔者遇到的一个案例中,使用动态游标的处理会花费分钟,而改为静态游标后,处理时间只需要1 秒钟,效率的差异非常明显
另外,在使用 DYNAMIC 游标的时候,必须注意“行的数据值、顺序和成员身份在每次提取时都会更改”的问题。
下面是一个看似正常, 但实际执行会造成死循环的示例
SET NOCOUNT ON
-- 建立测试环境
DECLARE @tb TABLE(
id int
PRIMARY KEY)
INSERT @tb(
id)
SELECT id = 1 UNION ALL
SELECT id = 2
-- 游标处理
DECLARE tb CURSOR LOCAL FAST_FORWARD
FOR
SELECT id FROM @tb
DECLARE @id int
OPEN tb
FETCH tb INTO @id
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT @id
UPDATE @tb SET
id = id + 2
WHERE id = @id
FETCH tb INTO @id
END
CLOSE tb
DEALLOCATE tb

分享到:
评论

相关推荐

    高性能MySQL(第3版).part2

    1.5.5选择合适的引擎24 1.5.6转换表的引擎27 1.6MySQL时间线(Timeline)29 1.7MySQL的开发模式32 1.8总结33 第2章MySQL基准测试35 2.1为什么需要基准测试35 2.2基准测试的策略37 2.2.1测试何种指标38 2.3...

    Oracle数据库Sql性能调优

    1.1 选用适合的ORACLE优化器 4 1.2 基础表的选择 4 1.3 访问TABLE的方式 5 1.4 共享SQL语句 5 1.5 执行路径. 5 1.6 选择最有效率的表名顺序(只在基于规则的优化器中有效) 6 1.7 WHERE子句中的连接顺序 6 1.8 SELECT...

    SQLServer2008查询性能优化 2/2

    《SQL Server 2008查询性能优化》适合于关心数据库应用系统性能的开发人员和数据库管理人员阅读。通过阅读《SQL Server 2008查询性能优化》,不仅可以学习到数据库性能管理的许多知识和技巧,还有助于养成良好的编程...

    SQLServer2008查询性能优化 1/2

    《SQL Server 2008查询性能优化》适合于关心数据库应用系统性能的开发人员和数据库管理人员阅读。通过阅读《SQL Server 2008查询性能优化》,不仅可以学习到数据库性能管理的许多知识和技巧,还有助于养成良好的编程...

    ADO.NET本质论.pdf

    本书适合具有一定数据库基础的开发人员阅读,也可用作数据库中高级课程或培训班配套教材。 第1章 数据:模型、应用程序和api 1.1 信息、数据建模和数据库 1.2 数据库和api基础 1.3 关系模型 1.3.1 关系...

    电缆故障测试仪

    共有四种类型供选择:“油浸纸型”、“不滴流型”,“交联乙烯”,“聚氯乙烯”,“自选介质”五个菜单项。 选择其中一项就等于选择一种速度,即电波在该电缆中的传播速度。 数据采样与测量:共有八个按键。  ...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    Access 微软 Access是一种桌面数据库,只适合数据量少的应用,在处理少量 数据和单机访问的数据库时是很好的,效率也很高 小型企业 三、 Oracle数据库概述 ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以...

    PHP和MySQL Web开发第4版pdf以及源码

    9.10 选择列数据类型 9.10.1 数字类型 9.10.2 日期和时间类型 9.10.3 字符串类型 9.11 进一步学习 9.12 下一章 第10章 使用MySQL数据库 10.1 SQL是什么 10.2 在数据库中插入数据 10.3 从数据库中获取数据 ...

    PHP和MySQL WEB开发(第4版)

    9.10 选择列数据类型 9.10.1 数字类型 9.10.2 日期和时间类型 9.10.3 字符串类型 9.11 进一步学习 9.12 下一章 第10章 使用MySQL数据库 10.1 SQL是什么 10.2 在数据库中插入数据 10.3 从数据库中获取数据 10.3.1 ...

    PHP和MySQL Web开发第4版

    9.10 选择列数据类型 9.10.1 数字类型 9.10.2 日期和时间类型 9.10.3 字符串类型 9.11 进一步学习 9.12 下一章 第10章 使用MySQL数据库 10.1 SQL是什么 10.2 在数据库中插入数据 10.3 从数据库中获取数据 ...

    oracle数据库经典题目

    主要用于声明变量、常量、数据类型、游标、异常处理名称以及本地(局部)子程序定义等。  执行部分:是PL/SQL块的功能实现部分,以关键字BEGIN开始,EXCEPTION或END结束(如果PL/SQL块中没有异常处理部分,则以END...

    Java面试宝典2020修订版V1.0.1.doc

    6、什么样的字段适合建索引 41 7、索引类型有哪些? 42 8、什么是事务?什么是锁? 42 9、什么叫视图?游标是什么? 43 10、视图的优缺点 43 11、列举几种表连接方式,有什么区别? 43 12、主键和外键的区别? 44 13...

    java面试题

    答:int是java的原始数据类型,Integer是java为int提供的封装类,java为每个原始数据类型都提供了封装类。 String和StringBuffer的区别? 答:String是不可变的对象,每次对String类型进行改变都相当于产生了一个新...

    JAVA面试题最全集

    选择树的一个节点时,如何得到这个节点? 70.向编辑框中输入字符时,如何控制只输入整数? 71.描述使用JDBC连接数据库的过程 72.EJB分为几类?什么是BMP,CMP? 73.什么是JNDI? 74.ADO是什么?ActiveX数据对象,是...

    H155-合集-大型数据库系统概论-实验.pptx

    掌握PL/SQL基础,包括PL/SQL语句块、变量、常用数据类型、运算符和表达式。 2. 掌握PL/SQL控制结构,包括顺序、选择、NULL和循环四种结构及GOTO语句。 3. 掌握PL/SQL中游标的使用方法。 4. 掌握SQL *Plus和Worksheet...

Global site tag (gtag.js) - Google Analytics