Oracle 11g 如何解释 Hibernate 生成的 Subselect/Query 并处理它?
How does Oracle 11g Interpreter a Subselect/Query generated by Hibernate and Process it?
我正在使用 hibernate 4.2.18 和 Oracle 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" 计划执行查询的能力...
我正在使用 hibernate 4.2.18 和 Oracle 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" 计划执行查询的能力...