关于对分区视图的困惑?
建立两个表, 约束列a2, 一个> 10,一个 <10, 然后建立分区视图, 但执行
SET STATISTICS IO on
select * from v1 where a2 =6
SET STATISTICS IO off
后,得到
表 't2 '。扫描计数 1,逻辑读 2 次,物理读 0 次,预读 0 次。
表 't1 '。扫描计数 1,逻辑读 2 次,物理读 0 次,预读 0 次。
为什么还会对两个表都进行扫描, 求解?
-----------------------
建表和视图脚本:
CREATE TABLE [dbo].[t1] (
[a1] [int] NOT NULL ,
[a2] [int] NOT NULL
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[t2] (
[a1] [int] NOT NULL ,
[a2] [int] NOT NULL
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[t1] WITH NOCHECK ADD
CONSTRAINT [PK_t1] PRIMARY KEY CLUSTERED
(
[a1],
[a2]
) ON [PRIMARY] ,
CONSTRAINT [CK_a1] CHECK ([a2] < 10)
GO
ALTER TABLE [dbo].[t2] WITH NOCHECK ADD
CONSTRAINT [PK_a2] PRIMARY KEY CLUSTERED
(
[a1],
[a2]
) ON [PRIMARY] ,
CONSTRAINT [CK_a2] CHECK ([a2] > 10)
GO
create view v1 as
select a1, a2 from t1
union all
select a1, a2 from t2
------解决方案--------------------CREATE TABLE t1 (
[a1] [int] NOT NULL primary key,
[a2] [int] NOT NULL check (a2 <10)
)
GO
CREATE TABLE t2 (
[a1] [int] NOT NULL primary key,
[a2] [int] NOT NULL check (a2> 10)
)
GO
create view v1 as
select a1, a2 from t1
union all
select a1, a2 from t2
go
select * from v1 where a2=6 --仅扫描t1
go
drop view v1
drop table t1
drop table t2
------解决方案--------------------搞错,抱歉!是分区视图。结果应该是:
表 't2 '。扫描计数 1,逻辑读 0 次,物理读 0 次,预读 0 次。
表 't1 '。扫描计数 1,逻辑读 2 次,物理读 0 次,预读 0 次。
楼主笔误了吧。
扫描计数 1,应该是扫描表约束,并不是扫描表数据页,因为:逻辑读 0 次,物理读 0 次,预读 0 次。
正确的。
------解决方案--------------------表 't2 '。扫描计数 0,逻辑读 0 次,物理读 0 次,预读 0 次。
表 't1 '。扫描计数 1,逻辑读 0 次,物理读 0 次,预读 0 次。