Oracle中触发SQL查询的底层机制
Underlying mechanism in firing SQL Queries in Oracle
当我们执行如下SQL查询
SELECT * FROM SOME_TABLE_NAME
内部到底发生了什么?有任何解析器在工作吗?是用C/c++写的吗?
谁能解释一下?
提前感谢所有人。
简短的回答是肯定的,当然在Oracle内部有一个解析器模块来解释语句文本。我的理解是Oracle的大部分源代码是用c编写的。
一般参考:
当Oracle被要求执行它时,任何SQL语句都可能经过三个步骤。通常,在这些步骤之间,控制权会返回给客户端,尽管细节可能取决于所使用的特定客户端和进行调用的方式。
(1) Parse——我相信第一个动作实际上是检查Oracle是否有一个精确语句文本的缓存副本。如果是这样,它可以节省再次解析语句的工作。如果没有,它当然必须解析文本,然后确定Oracle认为最适合该语句的执行计划。因此,从概念上讲,至少在这个阶段有两个实体在工作——解析器和优化器。
(2) Execute——对于SELECT语句,这一步通常只运行足够的执行计划,以便准备向客户端返回一些行。根据计划的细节,这可能意味着运行整个事情,也可能意味着只做非常小的一部分工作。对于任何其他类型的语句,执行阶段是所有工作实际完成的时候。
(3) Fetch——这是实际将行返回给客户端的时候。通常,客户端有一个预定的获取数组大小,它设置了单个获取调用将返回的最大行数。因此,可能会对单个语句进行多次取回。当然,如果语句不能返回行,则不需要执行读取步骤。
Manasi,
我认为Oracle内部会有自己的解析器,它会解析并尝试编译查询。我认为它与C或c++无关。
但需要确认
贾斯汀塞缪尔。
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 查询SQLite数据库中的日期
- 如何在ArangoDb AQL查询中指定数据库
- Qt SQLite没有查询或参数计数不匹配
- 如何使用c++在VS 2019上运行SQL查询
- 从返回的顶点缓冲区查询顶点结构
- 以非特权用户身份查询 NTFS 特殊文件的元数据?
- C/C++ - 查询平台相关的换行符(用于内存映射文件)
- 使用共享指针时,从共享指针本身释放内存的机制是什么
- 查询 NFS 上的提升进程间::file_lock
- Qt JSON – 从子项查询
- 在 c++ 中解决段树以外的范围查询的有效方法是什么?
- 无法从 Win10 中的 IDirectDraw7 查询 IDirect3D7
- 为什么 boost::comb 对结构化绑定的支持缺少结构化绑定机制对 boost::tuples::cons 的适应?
- 如何查询以确定我的 MacOS/X 应用程序是否处于应用程序午睡模式?
- 在子数组中查找多个查询的不同(唯一)值的数量
- 了解使用堆栈实现队列的递归调用机制
- DNS 查询格式标头结构中的小字节序问题
- QSql查询行受影响的结果
- Oracle中触发SQL查询的底层机制