一个很棘手的问题:
 先简单说下数据库里的结构doc_drawing 表,里面需要用的字段是:工程名称,项目名称,图纸类型
表示方法如:
          第1条记录:工程名称1  项目名称1  A1
          第2条记录:工程名称1  项目名称1  A2
          第3条记录:工程名称1  项目名称2  A3
          第4条记录:工程名称1  项目名称1  A4
          第5条记录:工程名称2  项目名称4  A2
          第6条记录:工程名称2  项目名称5  A3我现在要做的,是在doc_drawing 表中取出数据,并按工程名称分页,10个为一页;
我的做法是:
 1,先取出所有工程名称:select distinct d.projectname from doc_drawing
    再根据得到的结果分页。如,得到第50-60个工程的名称。得到10个工程名称后,  再自动生成如下SQL语句
 2,select d.paperType,d.itemName,d.projectname  from doc_drawing d  
inner join doctree t on d.commonid=t.mainid 
and                           
(d.projectName='中医药大学'  
or d.projectName='时代广场时代花园'   
or d.projectName='爱丽山庄一期修改'   
or  d.projectName='爱丽山庄一期改图'  
or  d.projectName='集团软件生产基地'   
or  d.projectName='巷地块二期'  
or  d.projectName='行政服务中心'   
or  d.projectName='园区一期工程'   
or d.projectName='防控制中心迁建工程'  
or  d.projectName='技工学院') 
order by projectname,itemName以上sql语句中,()中间的是自动生成的,这样的语句运行起来很慢。请问有什么办法优化吗?或者换个别的方法实现。
  注意:一定要按照工程名称分页。难就难在如果不按这样的方法的话,不好区别数据中工程与工程之间数据分不多了。谢谢各位啦,不够的话以后有分了再补上

解决方案 »

  1.   

    WEB分页技术一个典型的应用,针对这方面的探讨有多很多,可参考一下:http://www.oracle.com.cn/viewthread.php?tid=38&highlight=%B7%D6%D2%B3
      

  2.   

    这样不好,一方面sql效率低,同时需要前台和数据库多次通信,浪费系统资源;
    最好这样,先从数据库取出全部需要的信息(select d.paperType,d.itemName,d.projectname  from doc_drawing d  
    inner join doctree t on d.commonid=t.mainid order by d.projectname  )到前台数据缓冲区,然后定义一个计数器,依次将缓冲区的数据转移到显示区,每出现一个不同的projectname计数器加1,每当计数器达到10就输出一个分页且清零计数器,直至所有数据都输出到显示区
      

  3.   

    为什么不建一个临时表,将输入的projectName信息存在临时表中,然后用表关联
      

  4.   

    分页的话
    写好SQL再加入AJAX来实现吧
    不要一下子全部挑出所有的资料,速度太慢
      

  5.   

    select d.paperType,d.itemName,d.projectname  from doc_drawing d  
    inner join doctree t on d.commonid=t.mainid 
    and  d.projectName
    in (select distinct d.projectname from doc_drawing)
    order by projectname,itemName
      

  6.   

    heyixiang(子豚の愛人)  说的可以啊
      

  7.   

    /*+FIRST_ROWS*/ 可以用这个优化