我從2005 documentation看到,您無法從Xml列創建索引視圖。是否可以在Sql Server 2008中從Xml Data創建索引視圖?
這是可能在2008年或2008R2?我找不到任何文件說明它已被添加,但正在尋求確認,而我目前無法方便地訪問2008年環境。
編輯
我這背後的動機在於,XML的數量正在增長到SSRS報告,其中從XML彙總數據變得慢了點。
我從2005 documentation看到,您無法從Xml列創建索引視圖。是否可以在Sql Server 2008中從Xml Data創建索引視圖?
這是可能在2008年或2008R2?我找不到任何文件說明它已被添加,但正在尋求確認,而我目前無法方便地訪問2008年環境。
編輯
我這背後的動機在於,XML的數量正在增長到SSRS報告,其中從XML彙總數據變得慢了點。
我不相信這是可能的。如果沒有更好的解釋你想要做什麼,我可以提供的一個建議是在插入之前將XML分開(可能使用而不是觸發器,或者在應用程序層進行粉碎)並將部分希望用於單獨的非XML列中的索引視圖。
根據您的需求,您可以做的是這樣的:
創建一組從XML中提取關鍵信息的某些位存儲功能(函數接收XML作爲輸入,提取使用XPath/XQuery的信息,返回一個VARCHAR或INT什麼值)
CREATE FUNCTION dbo.SomeFunction(@Input XML)
RETURNS VARCHAR(20)
WITH SCHEMABINDING
AS BEGIN
......
END
這些鍵位添加到您的基表作爲計算列引用這些功能,與PERSISTED
關鍵字:
ALTER TABLE dbo.YourTable
ADD ComputedColumns1 AS dbo.SomeFunction(XmlColumn) PERSISTED
創建你在桌子上,這些計算列視圖,SCHEMABINDING:
CREATE VIEW vYourView
WITH SCHEMABINDING
AS
SELECT (list of columns)
FROM dbo.YourTable
上創建視圖的唯一,聚集索引 - 除非你已經違反任何索引視圖的要求,這應該只是罰款:
CREATE UNIQUE CLUSTERED INDEX CIX_YourView ON dbo.vYourView(.....)
如果您需要從XML列中提取少量信息的關鍵位,這很好,但絕對不推薦使用大量的XML元素/值。
查看我的答案 - 使用存儲函數和持久計算列,它可以完成 - 有點笨重和大量的打字/編碼,但它應該工作得很好... –
+1我打算建議持續計算列事實上,我重新提出了我的答案,因爲我沒有嘗試過,也沒有精力這樣做。 –
(呵呵)我確實很快用測試表進行了驗證 - 它確實按我的預期工作。 –