Key*_*dly 5 sql-server sql-server-2012
我最近一直在研究 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 吗?谢谢
用于query检索数据时将不使用选择性索引。
来自选择性 XML 索引 (SXI) - 支持的 XML 功能
选择性 XML 索引在exist()、value() 和nodes() 方法中支持SQL Server 支持的XQuery。
对于 query() 和 modify() 方法,选择性 XML 索引可能仅用于节点过滤。
对于 query() 方法,不使用选择性 XML 索引来检索结果。
但是测试表明,当您使用节点重写查询时会使用索引。这些查询返回相同但第二个更快,因为它使用选择性 XML 索引。
select data.query('/Log/CallStack/ExceptionThread/Line')
from LogData
select T.X.query('.')
from LogData
cross apply data.nodes('/Log/CallStack/ExceptionThread/Line') as T(X)
Run Code Online (Sandbox Code Playgroud)
第二个查询中使用的选择性 XML 索引定义为..
[Line] = '/Log/CallStack/ExceptionThread/Line' as XQUERY 'node()',
Run Code Online (Sandbox Code Playgroud)
我使用了我自己的一张表格来展示这种情况下的不同之处。
(67992 row(s) affected)
Table 'LogData'. Scan count 1, logical reads 388, physical reads 0, read-ahead reads 0, lob logical reads 1840865, lob physical reads 313514, lob read-ahead reads 24.
SQL Server Execution Times:
CPU time = 129792 ms, elapsed time = 180087 ms.
(1850106 row(s) affected)
Table 'xml_sxi_table_622625261_256000'. Scan count 1, logical reads 8416, physical reads 3, read-ahead reads 8403, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'LogData'. Scan count 1, logical reads 388, physical reads 0, read-ahead reads 0, lob logical reads 927882, lob physical reads 0, lob read-ahead reads 24.
SQL Server Execution Times:
CPU time = 65271 ms, elapsed time = 67636 ms.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
407 次 |
| 最近记录: |