小编Sai*_*udo的帖子

如何展平具有两个相关“许多”表的表的结果?

我重新组织了数据库中的一些表以使其更加灵活,但我不确定如何编写 SQL 以从中提取有意义的数据。

我有以下表格(为了更清楚的例子,有些缩写):

CREATE TABLE Loans(
    Id int,
    SchemaId int,
    LoanNumber nvarchar(100)
);

CREATE TABLE SchemaFields(
    Id int,
    SchemaId int,
    FieldName nvarchar(255)
);

CREATE TABLE LoanFields(
    Id int,
    LoanId int,
    SchemaFieldId int,
    FieldValue nvarchar(4000)
);
Run Code Online (Sandbox Code Playgroud)

使用以下数据:

INSERT INTO Loans (Id, SchemaId, LoanNumber) VALUES (1, 1, 'ABC123');

INSERT INTO SchemaFields (Id, SchemaId, FieldName) VALUES (1, 1, 'First Name');
INSERT INTO SchemaFields (Id, SchemaId, FieldName) VALUES (2, 1, 'Last Name');

INSERT INTO LoanFields (Id, LoanId, SchemaFieldId, FieldValue) VALUES (1, 1, 1, …
Run Code Online (Sandbox Code Playgroud)

pivot t-sql sql-server-2012

10
推荐指数
1
解决办法
1万
查看次数

向视图添加索引

我有一个包含 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
Run Code Online (Sandbox Code Playgroud)

然后,我将在其他执行聚合等操作的视图中使用此视图。

名为 TableRecords 的表在其唯一 id TableRecordId 上有一个索引,TableRecordRelations 在其重要字段上也有索引。

添加一两个索引是否有助于此视图的性能?是否需要更多数据来确定这一点?

sql-server-2005 sql-server view materialized-view

4
推荐指数
1
解决办法
917
查看次数