SQL Azure 分区 Table 上的选择性 XML 索引

Selective XML Index on SQL Azure Partitioned Table

随着 Azure SQL 的 v12 更新,我们现在可以使用 CREATE SELECTIVE XML INDEX 语句创建 Selective XML Indexes

我想不通的是如何在分区 table 上创建此索引,以便它与分区键对齐。例如,在 create 语句中包含分区键不起作用: CREATE SELECTIVE XML INDEX ( PartitionKey, XmlColumn )。同样指定 ON ( PartitionScheme( PartitionKey ) ) 也不起作用。

似乎选择性 xml 索引是特殊的野兽。我非常希望能够创建过滤选择性 xml 索引,但它似乎又不受支持,或者我无法弄清楚语法。

回到我的问题:我们如何才能将选择性 xml 索引与分区 table 对齐,还是始终在幕后对齐?

选择性 XML 索引 (SXI) 基本上是一个内部 table,其分区方式与基础 table 相同。因此,您不需要像其他索引那样显式地对索引进行分区。

下面是一个显示行为的示例脚本:

use tempdb;
go
CREATE PARTITION FUNCTION myDateRangePF1 (date)
AS RANGE RIGHT FOR VALUES ('20030201', '20030301', '20030401',
               '20030501', '20030601', '20030701', '20030801', 
               '20030901', '20031001', '20031101', '20031201');

GO
CREATE PARTITION SCHEME myRangePS3
AS PARTITION myDateRangePF1
ALL TO ( [PRIMARY] );
go
create table sxi_t (id int not null, dt date not null, primary key(dt, id), xmlcol xml)
on myRangePS3(dt);
go
CREATE SELECTIVE XML INDEX sxi_index
ON sxi_t(xmlcol)
FOR(
    pathab   = '/a/b' as XQUERY 'node()',
    pathabc  = '/a/b/c' as XQUERY 'xs:double', 
    pathdtext = '/a/b/d/text()' as XQUERY 'xs:string' MAXLENGTH(200) SINGLETON,
    pathabe = '/a/b/e' as SQL NVARCHAR(100)
);
go

select *
  from sys.partitions as p
  join sys.internal_tables as it
    on it.object_id = p.object_id
 where it.parent_id = object_id('sxi_t');
go

drop table sxi_t;
drop partition scheme myRangePS3;
drop partition function myDateRangePF1;
go

至于过滤后的 SXI,如果您创建辅助 SXI,则它会在内部根据非 NULL 值创建为过滤后的 SXI。

我也提交了一个错误来更新联机丛书中的一些细节。