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

时间:2015-03-29 10:17:05

标签: xml azure-sql-database

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

我无法弄清楚如何在分区表上创建此索引,以便它与分区键对齐。例如,在create语句中包含分区键不起作用: CREATE SELECTIVE XML INDEX ( PartitionKey, XmlColumn )。同时指定ON ( PartitionScheme( PartitionKey ) )也不起作用。

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

回到我的问题:我们如何将选择性xml索引与分区表对齐,或者它总是在幕后对齐?

1 个答案:

答案 0 :(得分:2)

选择性XML索引(SXI)基本上是一个内部表,它以与基表相同的方式进行分区。因此,与其他索引不同,您不需要显式分区索引。

以下是显示行为的示例脚本:

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。

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

相关问题