这里有8张表,每张表的数据量都是百万级。表间关系确定,但是存在1对1和1对N的情况。用户可以选择查看任意表的任意列,可以将任何一个或多个字段设为where条件。具体场景如下:
    一共是A、B、C、D、E、F、G、H表,用户先选择查看A表的a1、a2和B表的b1、b2字段,where条件是a3='1',b3='2'.将查询结果分页显示给客户。客户此基础上,要再看看D表的d1字段,于是增加条件d3='4'。如此分步查询,最后可能将8张表的数据都查出来,分页显示。
    因为这里没有主次表之分,所以不存在左、右连接的问题。每条数据都必须满足所有的where条件。
    索引之类的都已建好,常说的不用like、in之类的方法是不行的,有没有方法在sql上进行优化。

解决方案 »

  1.   

    你SQL 写好了么?贴出来看看那...
      

  2.   

    SQL是根据用户录入的查询字段和查询条件生成的。
      

  3.   

    你这个用 Congnos  工具实现更好。
      

  4.   

    分页为什么不用储存过程实现?
    我做过的一个分页
    CREATE OR REPLACE PROCEDURE pro_Pagination(
      Pindex in number,
      Psql in string,
      Psize in number,
      Pcount out number,
      outCursor out SYS_REFCURSOR
     )
     AS  v_sql string(32000);
      v_count number;
      v_Plow number;
      v_Phei number;
    --  v_string varchar2(1000);
    --  v_col string(8000);
    --  v_col_mid string(40);
    --  v_col_count int;
     Begin
      ------------------------------------------------------------取分页总数
      v_sql := 'select count(*) from (' || replace(Psql,chr(38),'') || ')';
      execute immediate v_sql into v_count;
      --解析表名
     /* select substr(''|| Psql ||'',instr(''|| Psql ||'','from')+4,
      length(''|| Psql ||'')-instr(''|| Psql ||'','from')-5) into v_string from dual;
      select count(*) into v_col_count from user_col_comments where table_name=''||upper(trim(v_string))||'';
      for i in 1..v_col_count loop
      select col into v_col_mid from (
      select t.column_name||',' col,rownum rm from user_col_comments t where table_name=''||upper(trim(v_string))||'')
      where rm=i;
      v_col:=v_col||v_col_mid;
      end loop;
      v_col:=substr(v_col,1,length(v_col)-1);*/
     
      ------------------------------------------------------------显示任意页内容
      Pcount := ceil(v_count/Psize);
      v_Phei := Pindex * Psize + Psize;
      v_Plow := v_Phei - Psize + 1;
      --Psql := 'select rownum rm,t.* from gridh_pole t' ;            --要求必须包含rownum字段
      v_sql := 'select * from (' || Psql || ') where rm between ' || v_Plow || ' and ' || v_Phei ;
      --'||v_col||'  open outCursor for v_sql; End pro_Pagination; --**************************************************************************************