写了个视图,关联了10几张表,如下:
CREATE OR REPLACE VIEW XXX AS
SELECT COL1, COL2, COL3 ... FROM T1
UNION ALL
SELECT COL1, COL2, COL3 ... FROM T2
UNION ALL
SELECT COL1, COL2, COL3 ... FROM T3
.......
T1,T2,T3... 建有索引,查询条件中用到了索引字段,
但是查询效率很低,有好的解决办法吗?谢了!

解决方案 »

  1.   

    10几张表啊?晕了,这样吧,你这样写
    CREATE OR REPLACE VIEW XXX AS 
    SELECT /*+choose*/ COL1, COL2, COL3 ... FROM T1 
    UNION ALL 
    SELECT COL1, COL2, COL3 ... FROM T2 
    UNION ALL 
    SELECT COL1, COL2, COL3 ... FROM T3 
    ....... 
    查询前分析表及其表的索引
      

  2.   

    如果就现有表结构的话,
    应该是没有更好的办法了,
    这几句SQL本身就很简单视图在使用的时候本身也会被解析成SQL语句,
    并不能提高性能但是从关键字union all上考虑,
    这么多的union all是要在一起比较,并去掉重复记录的,
    有十几个表呢,肯定会很慢了啊如果这些表结构差别不大的话,
    楼主为何不建一张中间表,
    每隔一段时间重新读一下记录,
    这样慢也只会慢一次不过要是实时要求很高的话,大约也行不通
    楼主就有必要从设计上作些修改了
      

  3.   

    说一下,union all不去掉重复的值,union会去掉重复的值