關系數據庫中的第一代 XML 支持是切分(或分解)文檔,以適應關系表格或將文檔原封不動地存儲為字符或二進制大對象(CLOB 或 BLOB)。這兩個方法中的任一種都嘗試將 XML 模型強制轉換成關系模型。然而,這兩種方法在功能和性能上都有很大的局限性。混合型模型將 XML 存儲在類似於 DOM 的模型中。XML 數據被格式化為緩沖數據頁,以便快速導航和執行查詢以及簡化索引編制。
pureXML在以下領域具有顯著優勢:
存儲:pureXML 技術將以“節點級”(而非“文檔級”)粒度存儲 XML。在數據庫中,物理存儲層的主要存儲單元是節點。每一頁中都存在一個節點,而其它的節點則來自相同或不同的文檔。每個節點不僅連結其父節點,還連結其子節點。
因此,浏覽到某個節點的父項、同級項或子項的效率都非常高,只要下一個引用的節點在同一頁,其遍歷速度將比指針的遍歷速度還要快,無需重寫整個文檔即可增加或減少節點,或者將節點重新部署到其它頁。
索引機制:管理著數百萬的 XML 文檔的 XML 應用程序並不罕見,因此要提供高查詢性能就要為大量的 XML 數據編制索引。DB2 支持在 XML 列上建立路徑特定的索引,因此元素和屬性常用作謂詞,且可以編制跨文檔連接的索引。
新的 XML 值索引可有效評估XML 模式表達式,從而提高 XML 文檔的查詢性能。與傳統的關系索引相比較,在關系索引中,索引鍵由用戶指定一個或多個表格列組成,而 XML 值索引則使用特定的 XML 模式表達式(XPath 的子集,XPath 不包含謂詞等等)來編制路徑和 XML 文檔(存儲在一個 XML 列中)中的值的索引。如果值不是在文檔中指定的,則該索引還可以在插入時通過模式來填充默認的屬性和元素值。
創建索引時,您可以指定要編制索引的路徑和索引類型。可以編制與存儲在該列中的 XML 文檔中的路徑表達式以及路徑表達式集匹配的任何節點的索引,而且該索引可以直接指向存儲中的節點(它與其父節點和子節點連接以便於快速浏覽)。索引條目並不是提供訪問文檔開頭的索引,而是包含實際文檔節點的位置信息。因此,該索引可以快速直接訪問文檔中的節點,並避免文檔遍歷。
查詢:XQuery,即查詢 XML 數據的一種新語言,用於處理不同的模式,包含諸如序列(而非 SQL 中的集)、多嵌套序列和稀疏屬性。XQuery 還可以支持不同種類的模式以及動態的結構更改。
IBM 實施不包含獨立的 XQuery 或 XPath 處理程序。基本的 XQuery 和 XPath 直接嵌入到查詢引擎中。該查詢編譯器自身是雙語的,帶有兩個可互操作的查詢語言解析程序 — 一個用於 SQL,另一個用於 XQuery — 以產生查詢圖表模型(用於處理關系和 XML 數據)的新變量。因為中間的查詢表達法是中性語言,XQuery、SQL 以及 XQuery 與 SQL的組合將編譯成同樣的中間表達法,經過同樣的重寫和轉化,以類似的方式優化並產生類似的可執行代碼。無論使用什麼語言來指定查詢設計,此過程都將產生最優的互操作查詢設計。
因為這兩個解析程序可以相互操作,所以您可以在同一語句中混合使用 SQL 和 XQuery,從而使搜索功能更強大:在 XML 文檔中進行查詢並從 SQL 返回其片斷。