Oracle 11g 如何解释 Hibernate 生成的 Subselect/Query 并处理它?

How does Oracle 11g Interpreter a Subselect/Query generated by Hibernate and Process it?

我正在使用 hibernate 4.2.18Oracle 11g

我有以下查询,这些表有索引,包括连接列中的索引以及 index_column 中的索引:

/*outer query generated by hibernate*/
select a as a1, 
       b as b1, 
       c as c1 
  from (
           /* inner query(the one I have mapped) */
           select a, b, c, index_column 
             from table_1
           inner join table_2 on table_1.a1 and table_2.a1
       ) this_
where this_.index_column = '123' /*parameter*/

上面带有注释的查询 内部查询 是我在 Hibernate 实体中映射的查询,外部查询是 Hibernate 创建的查询,一旦在运行时它会尝试使用参数查询实体。

Oracle 如何执行这个最终的 Hibernate 生成的查询?

更具体 - 它是否执行内部查询,将结果存入内存,然后应用外部过滤器?

where this_.index_column = '123' /*parameter*/

理解 外部查询 中的 parameter/filter 并使用执行过滤器是否足够聪明,而无需投影内部查询的所有结果并应用过滤器,换句话说,就好像 Hibernate Wrapping 查询不存在一样?

这太宽泛了,无法完全回答,而且确实与休眠无关,但是值得解释的事情:

大多数(如果不是全部)数据库引擎使用试探法来尝试使用所有可用信息尽快完成查询。这意味着引擎选择执行计划时会考虑整个查询。考虑索引,过去执行相同(或非常相似)的查询用于估计复杂性等。这是数据库引擎的关键卖点之一 - 使用 "the best" 计划执行查询的能力...