首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >游标的内部结构

问游标的内部结构
EN

Database Administration用户
提问于 2013-01-18 07:21:26
回答 1查看 800关注 0票数 2

我知道光标不是很好的主意,但是我有一些关于游标内部结构的问题。

游标的第一步是确定游标迭代的结果集。那么,游标是执行SELECT查询,并将结果放在某个临时表中,还是它的实现方式有所不同?

SQL将把数据页从内存光盘中取出,第一次需要数据页。因此,假设手动执行了简单的SELECT查询,并在内存中执行了SQL拉数据页。还假定SELECT查询在FOR子句中具有相同的查询。当游标关闭并解除分配时,游标结束时会发生什么情况?游标是否从旧数据页中释放内存,还是数据页保留在内存中?

EN

回答 1

Database Administration用户

回答已采纳

发布于 2013-01-18 07:51:20

取决于游标类型,如Concepts: Cursors中所记录的:

前向-只有向前的游标不支持滚动;它只支持从游标的开始到结束顺序取行。在获取行之前,不会从数据库中检索这些行.虽然数据库API游标模型认为仅向前游标是一种不同类型的游标,但Server却不这样做。Server将前向和滚动视为可应用于静态、键集驱动和动态游标的选项。静态当游标被打开时,静态游标的完整结果集是在tempdb中构建的。..。当游标打开时,键集驱动游标中行的成员资格和顺序是固定的。键集驱动的游标由一组唯一的标识符(键,称为键集)控制.键是由一组列生成的,这些列唯一地标识结果集中的行。keyset是游标打开时为SELECT语句限定的所有行的键值集。当游标被打开时,键集驱动的游标的键集是在tempdb中构建的。动态游标与静态游标相反。动态游标反映在滚动游标时对其结果集中的行所做的所有更改。结果集中的行的数据值、顺序和成员资格在每次提取时都可以更改。..。

至于内存的使用,所有的数据访问都要经过缓冲池,参见内存管理器体系结构。不存在“关闭”或“取消分配”的情况。数据在需要时输入内存,可以由多个查询引用,并且只有在需要更多空闲内存时才会被逐出。

票数 4
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/33237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档