在 Sql 服务器中指定 Xml 索引存储位置

Specify Xml index storage location in Sql Server

有没有办法在 MS Sql 服务器中指定存储位置?

我有一个相对较小的带有 xml 的表格(最多 2 GB 的数据)以及此 table 上的主要和次要 XML 索引。这些索引比基础 table 花费的时间 space 少。 有什么方法可以物理地将 table 和索引分成两个单独的分区?

我在 MSDN 中没有看到任何这样的选项 (https://docs.microsoft.com/en-us/sql/t-sql/statements/create-xml-index-transact-sql):

CREATE [ PRIMARY ] XML INDEX index_name   
    ON <object> ( xml_column_name )  
    [ USING XML INDEX xml_index_name   
        [ FOR { VALUE | PATH | PROPERTY } ] ]  
    [ WITH ( <xml_index_option> [ ,...n ] ) ]  
[ ; ]  

但我希望有一些技巧。

来自Creating XML Indexes:

The filegroup or partitioning information of the user table is applied to the XML index. Users cannot specify these separately on an XML index.

但是,如果我理解正确,您应该能够使用 create tableTEXTIMAGE_ON 子句将 XML 列和基于它的所有索引移动到单独的文件组中=] 语句:

create table dbo.MyTable (
  Id int not null,
  XMLData xml not null
)
on [PRIMARY]
textimage_on [LARGEDAT];

我在这里看到的唯一缺点是 table 中的所有 LOB 类型的列都将放置在该文件组中,而不仅仅是 XML 个。

编辑:

您可以使用 sp_tableoptionlarge value types out of row 选项强制行外 LOB 数据类型,即使它们的值足够小以适合 table 页面。