oracle 多表查詢的一種優化方法

2021-04-30 12:55:27 字數 1160 閱讀 4103

要用到4張表進行多表查詢

表1 jw  ------  jh  x  y                        3000+記錄

表2 djqkgx-------jh qkdyid                3000+記錄

表3 qkxx---------- id  qkdy                 100以內

表4 dba01---------jh rcyl1 rq              42萬+

現在已知 qkdy,rq  要查 max(a.x),max(a.y),min(a.x),min(a.y),max(b.rcyl1),min(b.rcyl1)

最初的方案:

select a.max(x),a.max(y),a.min(x),a.min(y),b.max(rcyl1),b.min(rcyl1) from jw a,dba01 b where a.jh in (select jh from djqkgx where qkdyid in (select id from qkxx where qkdy='"+qkdy+"')) and b.jh in(select jh from dba01 where rq=to_date('"+zb2+"','yyyy-mm-dd')) and a.jh=b.jh

耗時 380s+;

第二方案:分布查詢

select max(dba01.rcyl1) from dba01,qkxx,djqkgx where qkxx.qkdy='sss' and qkxx.id = djqkgx.qkdyid and djqkgx.jh = dba01.jh

但只是這一部就耗時400多秒 放棄

最優方案:

select max(a.x),max(a.y),min(a.x),min(a.y),max(b.rcyl1),min(b.rcyl1) from (select jh,x,y from jw where jh in (select jh from djqkgx where qkdyid=(select id from qkxx where qkdy='老兩三'))) a ,(select jh,rcyl1 from dba01 where rq=to_date('2001-11-17','yyyy-mm-dd'))b where a.jh=b.jh

就是查出來的資料當做臨時表查詢,這樣資料量大大的減少了 速度 也快多了

ORACLE多表查詢優化

oracle有個高速緩衝的概念,這個高速緩衝就是存放執行過的sql語句,那oracle在執行sql語句的時候要做很多任務作,例如解析sql語句,估算索引利用率,繫結變數,讀取資料塊等等這些操作。假設高速緩衝裡已經儲存了執行過的sql語句,那就直接匹配執行了,少了步驟,自然就快了,但是經過測試會發現高...

oracle多表查詢優化

用select 時,少用 多用字段 select name,code from table,select from table select count from table1 tabale2 table2的記錄數比table1的記錄少,查詢速度快 如果要是三張表,其中乙個是中間表的話,中間表放在最...

Oracle多表查詢的優化

1,重複性查詢 當你向oracle提供乙個sql的時候,oracle會首先在相應的記憶體中查詢這條語句,如果匹配到,就能直接返回結果,這樣就能節省記憶體和提高資料訪問效率。但是匹配sql語句需要注意以下幾點 1 字元級的比較 sql語句和共享池中的語句必須完全相同才能匹配完整,尤其注意大小寫和空格 ...