当前位置: 代码迷 >> Sql Server >> 视图可以加索引么?解决办法
  详细解决方案

视图可以加索引么?解决办法

热度:100   发布时间:2016-04-24 08:50:16.0
视图可以加索引么?
库中有10个相同的表,t1......t10 ,这10个表中的字段都是一样的。
现在有一个视图,把这个10个表union一起。
select id,name,phone from t1
union
select id,name,phone from t2
.....
....
union 
select id,name,phone from t10

这样生成一个视图,但这个视图数据量非常大,导致一旦查询这个视图,浪费的时间非常多。
看了看视图可以加索引,但是用union连接的视图加不了。
请问有好的办法提高效率么?
------解决思路----------------------

视图确实可以加索引,但是有很多苛刻的条件,比如里面不能有group by,不能有union,distinct等。

这个建议你还是做一个表,然后按照分区条件进行分区,这样从逻辑上就是一个表,物理上就是独立的表,这样速度会快一点。

如果不能做分区表,那就这样,你这个union,能不能改成union all,然后再试图外面用 select distinct * from xxx,这样就可以用索引试图:

select id,name,phone from t1
union all
select id,name,phone from t2
.....
....
union  all
select id,name,phone from t10


------解决思路----------------------
除了使用union all避免去重操作,你还可以使用with(nolock)允许读取脏数据的方式提高读取速度
view加索引别干,有极多的隐患,除非你的表实现了读写分离,否则写操作的时候会发生各种阻塞
索引视图特性
1、只能使用inner join
2、查询不能使用*,仅支持WITH SCHEMABINDING的view
3、仅支持unique索引
4、更改view后索引必须重建
5、修改任何一个table数据,都会造成view包含的对象造成写操作,可能导致更多的锁,阻塞

总结:也就改动极小的数据仓库能用。
  相关解决方案