oracle hint_px_distribute_push_subq_px_join_filter_qb_name_rewrite

azzotest發表於2015-09-30
pq_distribute hint
1,/*+ pq_distribute(@查詢塊 外部分發表 內部分發表) */
2,此提示讓最佳化器在生產和消費查詢伺服器分發兩個連線表的記錄集,這種分發可以極大提升並行連線操作的效能
3,6種分發提示的組合用法
  hash,hash
      每個表的記錄會被對映到消費查詢伺服器,在連線鍵或列上使用hash函式.如果對映一完成,每個查詢伺服器
      在每一對分割槽實行連線操作.這種用法最好用於,外部分發表和內部分發表大小差不多,二者連線操作會以
      hash join或sort merge join
 
  broadcast,none
      外部分發表的所有記錄會被髮布到每個查詢伺服器.而內部分發表會被隨機分發到查詢伺服器.這種方式適用
      於外部表非常小,而內部表很大.
 
  none,broadcast
      與上述相反
  partition,none
      外部分發表的記錄透過內部的分割槽會被對映.內部分發表必須以連線鍵構建分割槽.這種分發模式用於,外部表的分割槽
      數量等於查詢伺服器的倍數.比如:14分割槽和15個查詢伺服器.
      (注:最佳化器會忽略,如果內部表在連線鍵上未分割槽或不是等值連線)       
     
  none,none
      每個查詢伺服器會在一對匹配的分割槽上實行連線操作.自一個表到另一個表.兩個表必須是以等值連線操作               
     
     
示例:
 select /*+ ordered pq_distribute(s hash,hash) use_nl(s) */ column_list
 from r,s
 where r.c=s.c;     
 
 
 select /*+ ordered pq_distribute(s broadcast,none) use_hash(s) */ column_list
 from r,s
 where r.c=s.c;
 
 
 
 
 
hint
  push_subq
  1,令最佳化器在生成執行計劃時提早評估非合併子查詢,一般來京,非合併子查詢會在最後被執行,但
    如果其成本很高或者可以僅輸出很小的記錄集時,及時評估可以提升效能
  2,如果子查詢應用於遠端表或透過merge join連線,此提示無效
 
px_join_filter
  1,讓最佳化器使用並行點陣圖過濾
 
qb_name
  1,查詢可以定義也可以透過plan_table查詢得到
  2,可以用於外部查詢或子查詢
  3,如果多個查詢塊同名或者同一個查詢塊命名兩次,最佳化器會忽略引用此查詢塊的提示功能.
    未被指定命名的查詢塊會由系統產生一個名字,可以透過查詢plan_table得到
  4,示例:
     select /*+ qb_name(qb) full(@qb e) */ empno from emp e where ename='Smith';
    
    
rewrite
1,/*+ rewrite(@queryblock view) */   
2,如果可能不用考慮成本的話,引提示根據物化檢視重寫查詢.
  如果你在物化檢視中使用此提示,oracle會使用此檢視不管成本
  (前提是這個檢視列表中包括物化檢視)
3,oracle不會考慮列表之外的檢視,如果你未指定一個檢視列表,oracle
  查詢符合條件的物化檢視,而不管它的成本多少

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26224278/viewspace-1812465/,如需轉載,請註明出處,否則將追究法律責任。

相關文章