视图“ 许多和许多” 的限制
视图“
引言
在SQL Server 2005中,单个表可以拥有最多249个非聚集索引和1个聚集索引。在SQL Server 2008中,单个表可以拥有最多999个非聚集索引和1个聚集索引。普遍认为一个表只能有一个聚集索引,这个观点是正确的。我有一些问题想问大家。假设我从表本身创建一个视图,然后在视图上创建一个聚集索引。在我的视图中,我选择的是整个表本身。
USE tempdb
GO
-- Create sample Table
CREATE TABLE mySampleTable(ID1 INT, ID2 INT, SomeData VARCHAR(100))
INSERT INTO mySampleTable(ID1,ID2,SomeData)
SELECT TOP 1000 ROW_NUMBER()OVER (ORDER BY o1.name),
ROW_NUMBER()OVER (ORDER BY o1.name DESC),
o1.name
FROM sys.all_objects o1
CROSS JOIN sys.all_objects o2
GO
-- Create Index on Table
CREATE UNIQUE CLUSTERED INDEX [IX_SampleView] ON mySampleTable
(
ID1 ASC
)
GO
-- Create sample View
CREATE VIEW SampleView
WITH SCHEMABINDING
AS
SELECT ID1,ID2,SomeData
FROM dbo.mySampleTable
GO
-- Create Index on View
CREATE UNIQUE CLUSTERED INDEX [IX_ViewSample] ON [dbo].[SampleView]
(
ID2 ASC
)
GO
-- Enable Execution Plan using CTRL + M
SELECT ID1,ID2,SomeData
FROM mySampleTable
GO
SELECT ID1,ID2,SomeData
FROM SampleView
GO
-- Clean up
DROP VIEW SampleView
DROP TABLE mySampleTable
GO
现在运行以下脚本并回答这些问题
- Q1. 表是否使用在其自身上创建的索引?
- Q2. 视图是否使用在其自身上创建的索引?
- Q3. 这两个查询是否使用相同的索引?如果是,为什么?如果不是,为什么?
答案非常明确。
答案非常明确。
- A1: 是
- A2: 否
- A3: 阅读博客的剩余部分!
- SQL SERVER – ORDER BY 不起作用 – 视图的局限性 1
- SQL SERVER – 通过连接视图外部的表添加列代价高昂 – 视图的局限性 2
- SQL SERVER – 在视图上创建的索引不常用 – 视图的局限性 3
- SQL SERVER – SELECT * 和在视图中添加列的问题 – 视图的局限性 4
- SQL SERVER – 不允许 COUNT(*) 但允许 COUNT_BIG(*) – 视图的局限性 5
- SQL SERVER – 在索引视图中不允许 UNION 但允许 OR – 视图的局限性 6
- SQL SERVER – 不允许跨数据库查询在索引视图中 – 视图的局限性 7
- SQL SERVER – 不允许在索引视图中使用外连接 – 视图的局限性 8
- SQL SERVER – 不允许在索引视图中使用自连接 – 视图的局限性 9
- SQL SERVER – 索引视图的视图定义中不应包含关键字 – 视图的局限性 10
- SQL SERVER – 带有索引视图的视图之上视图不可行 – 视图的局限性 11
历史
- 2010年10月13日:初始发布