这很疯狂,但是在向我的xml字段添加主XML索引后,查询性能大约为50%。SQL Server 2008 - 为什么性能WORSE与XML索引?
这是我正在做的。
我有包含XML字段ActivityStepLog的表(包含LogData,XML)
我生成的采样数据通过运行下面的
INSERT INTO dbo.ActivityStepLog将插入此表(
LogGUID
,LogContextID
,LogTypeID
,LogSourceName
,LogContent
,LOGDATE
,CREATEDATE
,CreatedBy
)
选择
LogGUID = NEWID()
,LogContextID = newid的()
,LogTypeID = 2
,LogSourceName =“测试测试测试”
,LogContent =(SELECT顶部1 * FROM ##的sampleData SampleData1其中DecisionLogID = SampleData.DecisionLogID FOR XML AUTO,ELEMENTS,ROOT( 'BusinessRule'))
,LOGDATE = CURRENT_TIMESTAMP
,CREATEDATE = CURRENT_TIMESTAMP
,CreatedBy =
从##的sampleData的sampleData '测试通过创建'
的sampleData具有100,000行,我运行它在一个循环5次,用500000最终行。
的LogContent字段最终将具有诸如以下数据:
-2147483643 0569281A-D1A3-49E3-9E68-BCAC62E2C1C3 -2147483495 2009-05-18T11:47:00 none
(抱歉,不知道这是否将被正确格式化 - 它基本上只是一小组元素)。
然后,我只是运行一个非常简单的SQL -
SELECT *
FROM ActivityStepLog
WHERE LogContent.value('(/BusinessRuleDecisionLog/SampleData1/DecisionLogID)[1]', 'int') = -2147483535
上LogContent创建主XML索引之前,它需要8秒,之后,大约需要12秒。我已经清除了缓存等(DROPCLEANBUFFERS和FREEPROCCACHE),虽然它影响整体时间,但似乎并未影响比例。
这里是我的统计数据:
使用XML索引表 'xml_index_nodes_325576198_256000'。扫描计数百万,逻辑读取3517272,物理读取0,预读0,lob逻辑读取0,lob物理读取0次,lob预读0 表“ActivityStepLog”。扫描计数1,逻辑读取71694,物理读取0,预读0,lob逻辑读取0,lob物理读取0次,lob预读0
随着OUT XML索引
(5行(s)affected) Table'ActivityStepLog'。扫描计数1,逻辑读取71694,物理读取0,预读读取0,lob逻辑读取0,lob物理读取0,lob预读读取0.
因此,逻辑读取少得多,指数。我尝试添加所有可用的二级索引,但这并没有改善性能,而是具有主要的xml索引。
我会做一些这方面的更多的研究,但我真的很感激任何指针或意见。
感谢, 西尔维亚
因为你需要在除了主要的一个辅助指标 - 为路径IIRC – 2010-11-09 00:32:06
感谢您的评论,但正如我在文章中提到,我并添加所有可用的辅助XML索引,但没有没有看到任何性能提升。 – Sylvia 2010-11-09 03:58:14