我知道光标不是很好的主意,但是我有一些关于游标内部结构的问题。
游标的第一步是确定游标迭代的结果集。那么,游标是执行SELECT查询,并将结果放在某个临时表中,还是它的实现方式有所不同?
SQL将把数据页从内存光盘中取出,第一次需要数据页。因此,假设手动执行了简单的SELECT查询,并在内存中执行了SQL拉数据页。还假定SELECT查询在FOR子句中具有相同的查询。当游标关闭并解除分配时,游标结束时会发生什么情况?游标是否从旧数据页中释放内存,还是数据页保留在内存中?
发布于 2013-01-18 07:51:20
取决于游标类型,如Concepts: Cursors中所记录的:
前向-只有向前的游标不支持滚动;它只支持从游标的开始到结束顺序取行。在获取行之前,不会从数据库中检索这些行.虽然数据库API游标模型认为仅向前游标是一种不同类型的游标,但Server却不这样做。Server将前向和滚动视为可应用于静态、键集驱动和动态游标的选项。静态当游标被打开时,静态游标的完整结果集是在tempdb中构建的。..。当游标打开时,键集驱动游标中行的成员资格和顺序是固定的。键集驱动的游标由一组唯一的标识符(键,称为键集)控制.键是由一组列生成的,这些列唯一地标识结果集中的行。keyset是游标打开时为SELECT语句限定的所有行的键值集。当游标被打开时,键集驱动的游标的键集是在tempdb中构建的。动态游标与静态游标相反。动态游标反映在滚动游标时对其结果集中的行所做的所有更改。结果集中的行的数据值、顺序和成员资格在每次提取时都可以更改。..。
至于内存的使用,所有的数据访问都要经过缓冲池,参见内存管理器体系结构。不存在“关闭”或“取消分配”的情况。数据在需要时输入内存,可以由多个查询引用,并且只有在需要更多空闲内存时才会被逐出。
https://dba.stackexchange.com/questions/33237
复制相似问题