日期:2014-05-18  浏览次数:20525 次

同一表如何实现两个聚集索引的方法
表T数据量非常大。。。两字段:sflsh,sscbb

在做查询报表的时候,需要分别按

select * from t where sflsh=....


select * from t where sscbb=....

如果建立sflsh聚集索引,第一句非常快;
如果建立sscbb聚集索引,第二句非常快;

如果建立sflsh,sscbb复合聚集索引,第一句非常快,第二句慢;怎样解决这个问题呢?

------解决方案--------------------
探讨
表T数据量非常大。。。两字段:sflsh,sscbb

在做查询报表的时候,需要分别按

select * from t where sflsh=....


select * from t where sscbb=....

如果建立sflsh聚集索引,第一句非常快;
如果建立sscbb聚集索引,第二句非常快;

如果建立sflsh,sscbb复合聚集索引,第一句非常快,……

------解决方案--------------------
简单一个例子,索引视图
SQL code

CREATE TABLE dbo.test --创建表
(
    num decimal(4,2),
    id int
)
GO

CREATE CLUSTERED INDEX IX_TEST_TNAME ON dbo.test(num)  --创建聚集索引
GO 

CREATE VIEW dbo.v_test with schemabinding --创建架构绑定视图
AS 
SELECT num,id FROM dbo.test
GO 

CREATE UNIQUE CLUSTERED INDEX IX_TEST_TNAME ON dbo.v_test(id) --是视图上构建唯一聚集索引
GO