簡體   English   中英

SQL Server的xml列上的性能

[英]performance on xml column in sql server

我有規范化的表,這些表將數據保留為以下格式。

第一表名稱LogBook列是JourneyID,LocationID,PositionID,ID,

第二個表LogBookEvents列是LogBookID,LifeCodeID,LifeCode,LifeCodeValue,TotalValue

第一個表具有340萬條記錄,第二個表具有1730萬條記錄。

我發現即使我在表上擁有所有必需的索引,這些表的性能也非常沉重。

因此,我設計了一個具有XML格式的新表

新表是.. LogbookLifeCodes,列是JourneyID,LifeCode(XML類型)

通過這樣做,我將記錄數減少到900,000

並且LifeCode以以下格式保存數據

<LogBookLifeCodeEvents><LifeCodes>
<LogBookID>11</LogBookID>
<LocationID>0</LocationID>
<PositionID>0</PositionID>
<LifeCodeID>4</LifeCodeID>
<LifeCode>FH</LifeCode>
<LifeValue>0.0000</LifeValue>
<LifeTotal>0.0000</LifeTotal>

現在正在使用以下查詢以表格式返回數據。

Select Tbl.Col.value('LogBookID[1]', 'int'),  
   Tbl.Col.value('LocationID[1]', 'int'),  
   Tbl.Col.value('LocationPositionID[1]', 'int'),
   Tbl.Col.value('LifeCodeID[1]', 'int'),
   Tbl.Col.value('LifeCode[1]', 'varchar(20)') from LogbookLifeCodes outer apply LogbookLifeCodes.LifeCode.nodes('//LogBookLifeCodeEvents/LifeCodes') Tbl(Col) where Tbl.Col.value('LogBookID[1]', 'int') = 11

但是,此查詢需要4分鍾才能運行,以獲取LogBookID = 11的值,這是不可接受的,返回130,000條記錄。

但是如果我查詢以上規范化的表只需要01秒,記錄數就會相同

第二個表上的XML列具有主索引和輔助索引。

當我檢查執行計划時,標准化表索引(聚集)的成本為73%

但在XML列索引上僅花費45%

只是想知道,使用XML列而不是使用關系表更好? 還是因為第二個表的記錄少於第一個結構,所以有什么其他方法可以提高XML列的性能?

感謝您的贊美和建議

非常感謝

參考本文( 在SQL Server中使用XML數據的性能提示 ),請注意以下三個提示:

  1. 通過使用持久化列提升為關系列。
  2. 鍵入數據。
  3. 索引XML。

您可能正在為XML編制索引,但是(對我而言)為XML編制索引比根據查詢計划為關系數據編制索引更加困難。 本文的重點是,如果您確實非常努力地工作,則可以使用XML數據達到性能的相關級別,而不是超過它。

我理解為什么您可能會在概念上采用這種方式,但是SQL Server是一個關系數據庫。 通過適當管理的關系對象,您幾乎總是會獲得最佳性能。

您注意到,“即使我在表上擁有所有必要的索引,我也發現這些表的性能非常沉重”,但后來指出note的關系查詢僅需1秒,而基於XML的查詢則需4分鍾。

根據提供的信息,我不了解您要解決的問題,但是您不應該期望XML數據比SQL Server中的關系數據具有更好的性能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM