当我们触发像
这样的 SQL 查询时ORACLE 下的 SELECT * FROM SOME_TABLE_NAME
内部到底发生了什么?有解析器在工作吗?是用C/C++写的吗?
任何人都可以解释一下吗?
提前感谢大家。
最佳答案
简短的回答是肯定的,当然Oracle内部有一个解析器模块来解释语句文本。我的理解是 Oracle 的大部分源代码都是用 C 语言编写的。
一般引用:
当 Oracle 被要求执行任何 SQL 语句时,它可能会经历三个步骤。通常,控制权会在每个步骤之间返回给客户端,尽管详细信息可能取决于所使用的特定客户端以及进行调用的方式。
(1) 解析——我相信第一个操作实际上是检查 Oracle 是否拥有准确语句文本的缓存拷贝。如果是这样,它可以节省再次解析你的语句的工作。如果没有,它当然必须解析文本,然后确定 Oracle 认为最适合该语句的执行计划。因此从概念上讲,此阶段至少有两个实体在工作 - 解析器和优化器。
(2) 执行——对于 SELECT 语句,此步骤通常只运行足够的执行计划,以便准备好将一些行返回给客户端。根据计划的细节,这可能意味着运行整个事情,也可能意味着只做一小部分工作。对于任何其他类型的语句,执行阶段是所有工作实际完成的时候。
(3) 获取——这是实际将行返回给客户端的时间。通常,客户端具有预定的获取数组大小,该大小设置单个获取调用将返回的最大行数。因此,单个语句可能会进行多次提取。当然,如果该语句无法返回行,则不需要提取步骤。
关于c++ - Oracle 中触发 SQL 查询的底层机制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7722004/