现在数据库中为了控制每个表的大小,采用了按月份分表的设计。即假设表T_200910,T_200911 .. T_201001,这几个表的结构完全一致,但存储的数据不同。我想用视图的方式来简化查询语句,但有以下几点不明:1. 是否每次查询时都要重新建立视图? (数据会经常变化)2. 视图的多表查询在效率上有没有区别?3. 数据库在导出时是否需要单独操作视图?4. 对于非sys账户,建立视图是否需要额外指定权限?(该用户现在已经有见表的权限)。多谢啦 :)

解决方案 »

  1.   

    1,不需要重新建立的,会自动更新
    2,效率上应该跟基表差不多
    3,不需要的,视图不存储数据,只是一个结构 
    4 create view 权限就行了吧
      

  2.   

    1。2。普通视图在sql解析时,会把创建的sql拿到你的select语句中去解析。普通视图只是为了sql简单而做的,效率上根本没有提升。
    3。导出create语句就好了。
    4。需要对视图的相关权限(如create)。
      

  3.   

    加一样的别名。记住:视图只是为了查询语句方便。
    比如
    create view vasdf(aa,bb,cc,dd)
    select t1.a as aa,t1.b as bb,t1.c as cc, t1.d as dd from tbl1 t1
    union all
    select t2.a as aa,t2.b as bb,t2.c as cc, t2.d as dd from tbl2 t2
    union all
    可能create view语法有问题,但基本上就是这么个意思。查询时select aa,bb,cc,dd from vasdf
    会被解析成下面的select。不用担心。
      

  4.   

    你可以视图按照年份来建,例如:VI_2009
    create or replace view VI_2009 as
    select "a","b","c","d" from t_200901 union all
    select "a","b","c","d" from t_200902 union all
    select "a","b","c","d" from t_200903 union all
    select "a","b","c","d" from t_200904 union all
    select "a","b","c","d" from t_200905 union all
    select "a","b","c","d" from t_200906 union all
    select "a","b","c","d" from t_200907 union all
    select "a","b","c","d" from t_200908 union all
    select "a","b","c","d" from t_200909 union all
    select "a","b","c","d" from t_200910 union all
    select "a","b","c","d" from t_200911 union all
    select "a","b","c","d" from t_200912;