我最近一直在研究 Selective Xml Indexing 并一直试图弄清楚如何索引一个.query方法
如果我有以下查询
WITH XMLNAMESPACES (Default 'http://www.w3.org/2001/XMLSchema' )
SELECT
,a.value('@Number' , 'INT') As Number
,c.query('.') as FormattedXml
From
dbo.XmlTable As X
Cross Apply x.XmlColumn.nodes('Root') aa(a)
Cross Apply a.nodes('Block') bb(b)
Run Code Online (Sandbox Code Playgroud)
如果我正确地遵循它,我可以编写如下的选择性索引:
CREATE SELECTIVE XML INDEX xsi_XmlTable
ON dbo.XmlTable( XmlColumn )
WITH XMLNAMESPACES ( Default 'http://www.w3.org/2001/XMLSchema' )
FOR
(
root = '/Root' AS XQUERY 'node()'
, rootNumber = '/Root/@Number' AS SQL INT SINGLETON
)
GO
Run Code Online (Sandbox Code Playgroud)
我可以在索引中包含 c.query 吗?谢谢
我创建了一个扩展事件来监视和调整 Selective Xml 索引
CREATE EVENT SESSION [SelectiveXmlIndexing] ON SERVER
ADD EVENT sqlserver.selective_xml_index_no_compatible_sql_type,
ADD EVENT sqlserver.selective_xml_index_no_compatible_xsd_types,
ADD EVENT sqlserver.selective_xml_index_path_not_indexed,
ADD EVENT sqlserver.selective_xml_index_path_not_supported
WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,MAX_DISPATCH_LATENCY=30 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=NONE,TRACK_CAUSALITY=OFF,STARTUP_STATE=OFF)
GO
Run Code Online (Sandbox Code Playgroud)
在 SSMS 中,当我view live data然后执行xml查询和视图时,没有返回任何结果。
我所看到的是:

在看到结果之前,我还需要完成其他步骤吗?
我跟着:
http://www.mssqltips.com/sqlservertip/2731/managing-sql-server-extended-events-in-management-studio/
编辑,
添加请求的查询和索引
询问
WITH XMLNAMESPACES ( 'http://tempuri.org/tst.xsd' as tst )
SELECT
x.XmlId
,a.value('@id', 'int') As ColumnA
,b.value('.', 'NVARCHAR(25)') ColumnB
From
dbo.XmlTable As X
Cross Apply x.XmlContent.nodes('tst:Root/tst:Stuff') aa(a)
Cross Apply a.nodes('tst:Forms') bb(b)
Run Code Online (Sandbox Code Playgroud)
以及根元素和属性的索引
CREATE SELECTIVE XML INDEX [xsi_XmlTable] …Run Code Online (Sandbox Code Playgroud)