我有這樣的查詢性能下降:甲骨文使用子查詢中IN子句
SELECT
xmlelement("objects",
xmlagg(
xmlelement("object",
xmlelement("accountId", ACCOUNTS.accountId),
xmlelement("address", ACCOUNTS.ADDRESS)
)
)
INTO obj_info_xml
FROM
ACCOUNTS
WHERE account_code IN (SELECT EXTRACTVALUE(VALUE(accountCodes), '/accountCode/text()') as accountCode
FROM TABLE(XMLSEQUENCE(EXTRACT(X, '//accountCodes/accountCode'))) accountCodes);
當我硬編碼值內部IN
條款,然後查詢執行速度快,但是當我使用子查詢從XML選擇那麼我就不能獲得結果,因爲它執行得非常慢。你有什麼建議嗎?
幾個建議......有些發誓用EXISTS代替IN會提供性能上的優勢,但它有多大的改進值得懷疑 - 仍然是一個簡單的嘗試。但是,我認爲可能會有更多幫助,因爲子查詢使用子查詢因子分解(使用WITH語句)。然後,解析器將決定是否要像內嵌視圖那樣處理查詢,或者是否想要創建臨時表來存儲這些值。無論哪種方式,你應該看到性能增益。請閱讀以下有關子查詢因子分析的信息:https://oracle-base.com/articles/misc/with-clause – DanK
這是在將RDBMS用作XML的數據存儲而不是RDBMS時發生的情況。 –
不確定您使用的是哪個版本,但是您是否使用[XML索引](http://docs.oracle.com/cd/E11882_01/appdev.112/e23094/xdb_indexing.htm#ADXDB0500)進行了查看。如果XPATH查找是瓶頸,這應該有助於加快速度。 – ruudvan