2012-12-20 64 views
1

我有兩個查詢使用相同的解釋平原:extractValue一起 - XMLType的查詢延遲

1) select * from cfm_t_dmp; 

2) SELECT CATEGORY_ID, 
    STATUS, 
    USERNAME, 
    VALID_FROM, 
    EXTRACTVALUE (
     XMLType (data_definition), 
     '/customer/type/permissions/text()'), 
    EXTRACTVALUE (
     XMLType (data_definition), 
     '/bundle/configuration/permissions/text()'), 
    AB_LOCK 
FROM cfm_t_dmp 

查詢1)執行非常快,查詢2)我沒有看到分鐘後的處理結果。

主要區別是extractvalue,我執行查詢2)之前,它很快。

我可以以任何方式調整2)查詢嗎?或者這是一個數據庫問題?

感謝,

+1

'data_definition'列的類型是什麼?如果它是一個CLOB,你可能想嘗試將它改爲一個XMLTYPE並從你的select語句中刪除這個轉換。 – StevieG

+0

是的,這是一個CLOB。但是這個查詢在CLOB之前是有效的。 – odew

+0

之前工作?你有什麼改變,使其無法正常工作? – StevieG

回答

1

你的第二個查詢是慢,因爲甲骨文必須搜索那些你的XPath的XML類型。如果你有很多數據,或者XML的內容很大,那麼這是很多額外的工作,並且會降低查詢速度。

加快速度:如果XPath不會更改,並且XML數據不會更改,則可以添加一個包含EXTRACTVALUE表達式結果的額外列。查詢數據會更快,因爲您的查詢不需要調用EXTRACTVALUE(因爲它只會讀取新列中的數據),但是這會要求您在插入或更新時預先填充數據。

雖然我從來沒有嘗試過這個,但它顯然也可以在Oracle中對XML數據進行索引:http://docs.oracle.com/cd/B28359_01/appdev.111/b28369/xdb_indexing.htm儘管由於您沒有測試值的兒子條件,所以xpaths,我不確定索引是否會有所幫助這裏。