是否可以从Sql Server 2008中的Xml Data创建索引视图?

时间:2011-07-07 22:38:48

标签: sql-server xml indexed-view

我从2005 documentation看到您无法从Xml列创建索引视图。

这可能在2008年或2008年2月?我找不到任何文档说这是添加的东西,但我正在寻找确认,而且我目前还没有方便地访问2008环境。

修改

我背后的动机是Xml的数量正在增长到SSRS报告来自Xml的聚合数据变慢的程度。

2 个答案:

答案 0 :(得分:6)

根据您的需要,您可以做的是:

  • 创建一组存储函数,从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 :(得分:3)

我不相信这是可能的。如果没有更好地解释你想要做什么,我可以提供的一个建议是在插入之前将XML拉开(可能使用而不是触发器,或者在应用程序层执行此碎化)并存储部件想要在单独的非XML列中使用索引视图。