Sql-Server

向視圖添加索引

  • February 14, 2013

我有一個在 varchar 類型欄位中包含 XML 數據的表。此欄位用於儲存來自各種不同 XML 模式的數據,其中一些通過儲存在另一個表中的記錄相關聯。

我最近創建了一些解析 XML 的視圖,並且在某些情況下對某些值進行了透視。這些視圖為我的報告提供了出色的數據,但對性能造成了嚴重影響。我想知道是否可以通過索引提高性能。

下面是一個視圖範例:

create view StudentHours as
 select
     x.TableRecordId as Id
   , x.RecordXml.value('(/TableRecord/LOGDate)[1]', 'DateTime') as LogDate 
   , x.RecordXml.value('(/TableRecord/LOGHours)[1]', 'float') as Hours
   , x.RecordXml.value('(/TableRecord/LOGApproved)[1]', 'varchar(10)') as Approved
   , y.PKTableRecordId as CourseId
 from
   (select TableRecordId, Cast([Schema] as Xml) as RecordXml 
    from TableRecords where TableSchemaId = 1857) as x
 join TableRecordRelations as y on x.TableRecordId = y.FKTableRecordId

然後,我將在其他執行聚合等的視圖中使用此視圖。

名為 TableRecords 的表在其唯一 id TableRecordId 上有一個索引,並且 TableRecordRelations 在其重要欄位上也有一個索引。

添加一個或兩個索引會幫助這個視圖的性能嗎?是否需要更多數據來確定這一點?

我相信轉換為 XML 會影響您的性能,Paul White 描述了正在發生的事情Compute Scalars, Expressions and Execution Plan Performance

轉換為 XML 會延遲到您實際使用 XML 列的位置,因此在您的查詢中,對於返回的每一行,轉換會發生 3 次。

引用自:https://dba.stackexchange.com/questions/34700