目录

  • RowIterator
    • Init()
    • Read()
    • SetNullRowFlag()
    • UnlockRow()
    • StartPSIBatchMode()
    • EndPSIBatchModeIfStarted()
    • real_iterator()

RowIterator

使用选定的访问方法读取单个表的上下文:索引读取,扫描等,缓存的使用等。
它主要是用作接口,但也包含一些私有成员函数,这些函数对于许多实现都是有用的,例如错误处理。
RowIterator是一个简单的迭代器。您对其进行初始化,然后一次读取一个记录,直到Read()返回EOF。如果需要,RowIterator可以从其他Iterators读取数据,例如SortingIterator,它从另一个RowIterator接收记录并对其进行排序。
抽象并不完全紧密。特别是,它仍然留给TABLE一些细节,例如要读取的列(read_set)。这意味着可能很难对两个表的联接进行排序。

使用方法:

unique_ptr<RowIterator> iterator(new ...);
if (iterator->Init())return true;
while (iterator->Read() == 0) {...
}

Init()

初始化或重新初始化迭代器。
在尝试Read()之前,必须始终调用Init()(但是Init()并不意味着Read())。
您可以多次调用Init();随后的调用将使迭代器倒回(或重新定位,具体取决于迭代器是否采用TABLE_REF),并允许您重新读取记录。

Read()

读一行。
该行数据实际上不是从函数返回的;它被放在表的记录缓冲区中(如果有连接,则放在表中),即table-> records [0]。

SetNullRowFlag()

将当前行缓冲区标记为包含或不包含NULL行,这样,如果您从中读取并且标志为true,则无论缓冲区中实际上有什么(通常是一些旧的剩余行),您都只会得到NULL。
当迭代器没有产生任何行并且我们需要产生一个NULL补充行时,它用于外部联接。Init()或Read()不一定会重置此标志,因此,如果您将其设置为true,请确保在需要时也将其设置为false。
注意,可以在不首先调用Init()的情况下调用它。

UnlockRow()

在一些特定的查询中,比如SELECT FOR UPDATE, UPDATE or DELETE查询,正在读取的行将在上面上锁。这意味着锁的设置取决于优化器是否选择了一个表扫描或者使用索引。
但是在某些事务隔离级别下(读取或提交),当且仅当行因为WHERE这个谓词失败,只有返回的行受到保护,那些没有返回的行就不会受到保护了。
所以如果Read()返回一行数据,如果不使用它,就应该Read()之后调用UnlockRow(),它将允许存储引擎在这种情况下释放行锁。

StartPSIBatchMode()

启动性能模式批处理模式。
PFS批处理模式可以减轻性能模式的开销,该性能模式通常应用于整个联接的最内表。
如果在扫描表之前先启动它,然后再结束它,则整个处理程序调用集将作为一组,并且成本将平均分配。这样可以减少计时器开销。
如果启动PFS批处理模式,则还必须注意在扫描结束时以一种另一种方式结束它。请注意,即使查询突然结束(达到LIMIT或者发生错误),也必须结束它。最简单的解决方法就是在扫描结束时在根迭代器上简单调用EndPSIBatchModeIfStarted()。
开始批处理和结束的规则是:
1、如果迭代器只有一个子类,则将所有StartPSIBatchMode()的调用转发给它。
2、如果驱动迭代器(使用for循环或者类似的方法读取行),需要使用PFSBatchMode
3、如果迭代器有多个子类,忽略StartPSIBatchMode()的调用,并且根据需要自行处理批处理模式
所以,在扫描单个表时,通常会为该表激活批处理模式,因为我们在根迭代器上调用该函数,并且一直向下传入表迭代器。但是调用后,该调用将被忽略,并且迭代器需要根据需要自行激活批处理模式。

EndPSIBatchModeIfStarted()

结束性能模式批处理模式
具有子级的迭代器(复合迭代器)必须将该函数调用转发给所有子迭代器。这样可以确保在对根迭代器进行这样的调用之后,所有处理程序都退出批处理模式。

real_iterator()

如果该迭代器包装了其他迭代器,需要将该迭代器向下转换为特定的迭代器类型。

《MySQL 8.0.22执行器源码分析(3.1)关于RowIterator》相关推荐

  1. ComeFuture英伽学院——2020年 全国大学生英语竞赛【C类初赛真题解析】(持续更新)

    视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...

  2. ComeFuture英伽学院——2019年 全国大学生英语竞赛【C类初赛真题解析】大小作文——详细解析

    视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...

  3. 信息学奥赛真题解析(玩具谜题)

    玩具谜题(2016年信息学奥赛提高组真题) 题目描述 小南有一套可爱的玩具小人, 它们各有不同的职业.有一天, 这些玩具小人把小南的眼镜藏了起来.小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的 ...

  4. 信息学奥赛之初赛 第1轮 讲解(01-08课)

    信息学奥赛之初赛讲解 01 计算机概述 系统基本结构 信息学奥赛之初赛讲解 01 计算机概述 系统基本结构_哔哩哔哩_bilibili 信息学奥赛之初赛讲解 02 软件系统 计算机语言 进制转换 信息 ...

  5. 信息学奥赛一本通习题答案(五)

    最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...

  6. 信息学奥赛一本通习题答案(三)

    最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...

  7. 信息学奥赛一本通 提高篇 第六部分 数学基础 相关的真题

    第1章   快速幂 1875:[13NOIP提高组]转圈游戏 信息学奥赛一本通(C++版)在线评测系统 第2 章  素数 第 3 章  约数 第 4 章  同余问题 第 5 章  矩阵乘法 第 6 章 ...

  8. 信息学奥赛一本通题目代码(非题库)

    为了完善自己学c++,很多人都去读相关文献,就比如<信息学奥赛一本通>,可又对题目无从下手,从今天开始,我将把书上的题目一 一的解析下来,可以做参考,如果有错,可以告诉我,将在下次解析里重 ...

  9. 信息学奥赛一本通(C++版) 刷题 记录

    总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716 信息学奥赛一本通(C++版) 刷题 记录 http://ybt.ssoier. ...

  10. 最近公共祖先三种算法详解 + 模板题 建议新手收藏 例题: 信息学奥赛一本通 祖孙询问 距离

    首先什么是最近公共祖先?? 如图:红色节点的祖先为红色的1, 2, 3. 绿色节点的祖先为绿色的1, 2, 3, 4. 他们的最近公共祖先即他们最先相交的地方,如在上图中黄色的点就是他们的最近公共祖先 ...

最新文章

  1. sybase的sysprocesses中的hostname显示不全_Linux中Postfix邮件认证配置(五)
  2. JAVA:this的使用
  3. 《深入理解C++11:C++ 11新特性解析与应用》——3.2 委派构造函数
  4. 被1.5W用户吐成翔的10大互联网产品,你躺枪了吗?
  5. maya导入abc动画_三维文件格式知多少 | abc、glTF、fbx、obj、dae、stl、3ds...
  6. 你的专业 VS 你妈口中你的专业
  7. linux fb设备驱动,linux设备驱动归纳总结(八):1.总线、设备和驱动
  8. 大学python作业_2020年大学moocPython编程基础作业答案
  9. .NET的托管堆中是否可能出现内存泄漏现象
  10. 启动Oracle的图像化管理工具OEM报错
  11. Python3安装tkinter
  12. CMD启动MySQL常用命令
  13. 马士兵老师Java虚拟机调优
  14. baidu.com 百度域名被劫持怎么办 baidu.yxsc33.com
  15. 数字化底层逻辑揭秘!探寻地产工程行业发展新范式
  16. C#调用百度大脑API初探2
  17. 骁龙870相当于什么处理器 骁龙870什么水平
  18. 战火与秩序迁城显示服务器忙,战火与秩序迁城方法介绍
  19. 微信小程序开发者问题集锦
  20. MySQL 性能优化:8 种常见 SQL 错误用法!

热门文章

  1. java request获取文件_request获取路径方式
  2. 【WXS数据类型】Array
  3. attr和prop的区别以及在企业开发中应该如何抉择
  4. 如何将视频设置为网页背景
  5. JS相关知识总结(一)
  6. 键盘keydown值表
  7. 如何加快Json 序列化?有哪些方法?
  8. 史上最全的maven pom.xml文件教程详解
  9. lintcode :Integer to Roman 整数转罗马数字
  10. JAVA多线程和并发基础面试问答(转载)