2016-04-21 40 views
0

我使用休眠4.2.18的Oracle 11gOracle 11g如何解釋由Hibernate生成的子選擇/查詢並處理它?

我有以下查詢,這些表有索引,包括在連接列索引和也,指數在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*/ 

或者

是不是足夠聰明,理解參數/過濾器是在外部查詢和使用執行過濾,不從內部查詢投影所有的結果和應用換句話說,就好像那個Hibernate Wrapping查詢不存在一樣?

回答

0

這是過於廣泛,完整地回答,真的沒有任何與休眠模式,但東西值得說明的是:

大部分(如果不是全部)數據庫引擎使用啓發式嘗試和完成使用所有可用信息儘可能快地查詢。這意味着當引擎選擇執行計劃時將考慮整個查詢。考慮索引,過去執行相同(或非常相似)的查詢用於估計複雜性等。這是數據庫引擎的關鍵賣點之一 - 使用「最佳」計劃執行查詢的能力...

+0

好點@Amit和另外一條信息,那些表具有索引,包括索引連接列以及index_column中的索引 –