为什么视图无法利用到索引?
表
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