65.9K
CodeProject 正在变化。 阅读更多。
Home

视图“ 许多和许多” 的限制

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.50/5 (2投票s)

2010年10月13日

CPOL

2分钟阅读

viewsIcon

13259

视图“ 许多和许多” 的限制

引言

在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: 阅读博客的剩余部分!

历史

  • 2010年10月13日:初始发布
© . All rights reserved.