progame 2006年02月07日
为什么视图无法利用到索引?

oxJob(JobID) jobid为聚集索引
oxOrder(OrderID,JobID) 两个字段都分别建有索引

CREATE VIEW dbo.vw_test

AS

select jobid, operationid = jobid from dbo.oxjob
union all
select jobid, orderid as operationid from dbo.oxorder

查询:
select jobid from vw_test where operationid = @id

此时oxJob的索引无法正常利用到

sql server分解的查询是先按聚集索引得到jobid的一个结果集
再在此结果集上进行filter

如果view 不union oxOrder的话 没有这个问题
是否当一个select中有重复column出现时 则重新命名的column上无法利用索引?
select jobid from vw_test where jobid= @id 这个查询是可以正常利用索引的

请达人指点


以下是测试script:
CREATE TABLE [dbo].[C] (
[a] [varchar] (50) NOT NULL ,
[b] [varchar] (50) NULL
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[D] (
[a] [varchar] (50) NOT NULL ,
[c] [varchar] (50) NULL
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[C] WITH NOCHECK ADD
CONSTRAINT [PK_C] PRIMARY KEY CLUSTERED
(
[a]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[D] WITH NOCHECK ADD
CONSTRAINT [PK_D] PRIMARY KEY CLUSTERED
(
[a]
) ON [PRIMARY]
GO

CREATE INDEX [IX_C_b] ON [dbo].[C]([b]) ON [PRIMARY]
GO



CREATE VIEW dbo.vw_Test
AS
SELECT a,b from C
union all
select a,a from D
...全文
604 点赞 收藏 18
写回复
18 条回复

还没有回复,快来抢沙发~

发动态
发帖子
疑难问题
创建于2007-09-28

9298

社区成员

12.1w+

社区内容

MS-SQL Server 疑难问题
社区公告
暂无公告