java 左连接有图_索引视图和左连接一劳永逸

我正在使用MSSQL Server 2008 R2,当我偶然发现索引视图时,我正在尝试优化我的视图 . 不幸的是,我的大多数视图都使用了索引视图不支持的左外连接 . 经过一系列的研究,我感到很困惑,最好的办法是解决这个问题 . 我看到它的方式,我有以下选择:

1) 使用诀窍将左连接转换为内连接,以使用"OR (IsNull(a) AND IsNull(b))"模拟左连接

我在几个地方找到了这个解决方案,但提到了性能损失 .

2) 将左连接转换为内连接,并用空guid(00000000-0000-0000-0000-000000000000)替换可空列的空值,并在右表中添加一个匹配guid的行 .

这似乎是性能最明显的,但是对于每一行都是空的浪费似乎是空的 .

3) 将我的视图分解为两个视图 . 第一个视图是我的大部分逻辑,即Indexable . 第二个视图派生自第一个视图并添加左连接 .

这里的想法是,通过索引的基本视图可能会有性能提升 . 甚至查询派生的视图至少会获得一些性能优势 .

4) 不要将我的观点编入索引

是否会使视图比上述任何选项更具性能?

5) 我没想到的想法

我将我的基本场景编写如下:

CREATE TABLE [dbo].[tbl_Thumbnails](

[ThumbnailId] [uniqueidentifier] NOT NULL,

[Data] [image] NULL,

[Width] [smallint] NOT NULL,

[Height] [smallint] NOT NULL

CONSTRAINT [PK_tbl_Thumbnails] PRIMARY KEY CLUSTERED

(

[ThumbnailId] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO

CREATE TABLE [dbo].[tbl_Tags](

[TagId] [uniqueidentifier] NOT NULL,

[ThumbnailId] [uniqueidentifier] NULL

CONSTRAINT [PK_tbl_Tags] PRIMARY KEY CLUSTERED

(

[TagId] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY]

GO

CREATE VIEW [dbo].[v_Tags] WITH SCHEMABINDING AS

SELECT dbo.tbl_Tags.TagId, dbo.tbl_Tags.ThumbnailId

FROM dbo.tbl_Tags LEFT OUTER JOIN

dbo.tbl_Thumbnails

ON dbo.tbl_Tags.ThumbnailId = dbo.tbl_Thumbnails.ThumbnailId

GO

INSERT INTO tbl_Tags VALUES ('16b23bb8-bf17-4784-b80a-220da1163584', NULL)

INSERT INTO tbl_Tags VALUES ('e8b50f03-65a9-4d1e-b3b4-268f01645c4e', 'a45e357b-ca9c-449a-aa27-834614eb3f6e')

INSERT INTO tbl_Thumbnails VALUES ('a45e357b-ca9c-449a-aa27-834614eb3f6e', NULL, 150, 150)

现在,执行以下查询会产生“无法在视图上创建索引”Test.dbo.v_Tags“因为它使用LEFT,RIGHT或FULL OUTER连接,并且在索引视图中不允许OUTER连接 . 请考虑使用INNER连接 . “:

CREATE UNIQUE CLUSTERED INDEX [TagId] ON [dbo].[v_Tags]

(

[TagId] ASC

)

GO

这是预期的行为,但您建议采取什么行动以从我的方案中获得最佳性能?这里的主要观点是最佳表现 .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值