Sql-Server
向視圖添加索引
我有一個在 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 次。