我遇到PeopleSoft查詢(使用Oracle後端數據庫)的問題:當涉及多個記錄的相當複雜的查詢由用戶設置時,PS執行強制連接的安全記錄,從而生成SQL像這樣:Peoplesoft查詢 - 性能
選擇....從
ps_job一個,PS_EMPL_SRCQRY A1,ps_table2 b,ps_sec_rcd2 B1,ps_table3 C,ps_sec_rcd3 C1
其中(...安全連接A-> A1,B- > b1,c-> c1 ...)和(... a,b和c ...的連接)和
a.setid_dept ='XYZ';
(假設最後一個條件有很高的選擇性,並且對列的索引) 顯然,由於是創造了巨大的加入的條件下,排列第一,寫入臨時段,並當最後一個條件最終被應用時,只有一小部分被選中。以這種方式制定的查詢很可能達到APPSRV的預設超時,甚至是QRYSRV的預設超時。當手動編寫查詢時,我寧願將最有選擇性的條件移到開始位置,從而將正在處理的數據量限制到相當的水平。
關於如何使PS表現如此的任何想法?事實上,已經重寫「甲骨文風格的」 SQL到ANSI SQL似乎加快了查詢 - 然而,PS寫甲骨文樣式的查詢......
在此先感謝
DBA
請添加不良執行查詢的計劃。 – 2010-03-19 22:15:08
這裏有幾個笛卡爾連接,索引被FTS部分繞過......通常,這樣的計劃被顯示爲「不這樣做的一種方式」。它會真的超過可用的字符限制。 – DBa 2010-04-12 15:01:08
全表掃描可能沒問題。如果您訪問的記錄超過一半,則幾乎總是好的。合併連接笛卡兒幾乎總是不好的。我會先看看那些,看看你能做些什麼(索引,額外的連接標準,改變表格順序)以便首先解決這些問題。 – 2010-05-05 16:14:23