我正在使用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 …Run Code Online (Sandbox Code Playgroud) 我有两张桌子,存储候选人和他们的成绩.简单的加入可以通过匹配ID等获得所有候选人及其成绩.
例如:
Alan C
George A
Run Code Online (Sandbox Code Playgroud)
等等.但是:
Nina
Run Code Online (Sandbox Code Playgroud)
Nina的成绩是无效的,因为她没有参加考试.
如何获得如下输出?
Alan C
George A
Nina
Run Code Online (Sandbox Code Playgroud)
尼娜虽然没参加考试,但仍然如此.我尝试过空检查,然后执行某些操作等.
谢谢