zoukankan      html  css  js  c++  java
  • Oracle语句优化之一

    public List<TdDepartment> createZtreeDep(String compId) {
            
            List<TdDepartment> dd = new ArrayList<TdDepartment>();
           //查找所有子部门的sql语句
         String sql
    = "select dep_id,dep_name,super_id,folder from td_department "+ "start with super_id in ( "+ "select dep_id from td_department "+ "where valid_flag = 'Y' and comp_id = '"+compId+"')connect by prior dep_id = super_id";
        //查找部门本身的sql语句 String parentsql
    = "select dep_id ,dep_name,super_id,folder from td_department "+ "where valid_flag = 'Y' and comp_id = '"+compId+"'";
    EpDB db
    = new EpDB(); ArrayList<HashMap> parentdeparts = db.getHashData(parentsql); ArrayList<HashMap> departs = db.getHashData(sql); if(parentdeparts == null || parentdeparts.size() <= 0) return null;
        //将部门加入到list中
    for(int i=0; i<parentdeparts.size(); i++){ String dep_id = parentdeparts.get(i).get("DEP_ID").toString(); String dep_name = parentdeparts.get(i).get("DEP_NAME").toString(); String super_id = parentdeparts.get(i).get("SUPER_ID").toString(); TdDepartment td = new TdDepartment(); td.setId(dep_id); td.setPid(super_id); td.setName(dep_name); if(parentdeparts.get(i).get("FOLDER") != null){ String folder = parentdeparts.get(i).get("FOLDER").toString(); if("Y".equals(folder)){ td.setOpen("true");//非叶子结点则需要展开 }else{ td.setOpen("false"); } } //取消循环读取 //td.setChild(createDepartments(dep_id)); dd.add(td); }      //将子部门加入到list中  for(int i=0; i<departs.size(); i++){ String dep_id = departs.get(i).get("DEP_ID").toString(); String dep_name = departs.get(i).get("DEP_NAME").toString(); String super_id = departs.get(i).get("SUPER_ID").toString(); TdDepartment td = new TdDepartment(); td.setId(dep_id); td.setPid(super_id); td.setName(dep_name); if(departs.get(i).get("FOLDER") != null){ String folder = departs.get(i).get("FOLDER").toString(); if("Y".equals(folder)){ td.setOpen("true");//非叶子结点则需要展开 }else{ td.setOpen("false"); } } //取消循环读取 //td.setChild(createDepartments(dep_id)); dd.add(td); } return dd; }

    需要优化点:

    思考一:通过sql语句的优化来优化

    思考二:通过程序递归的方法来优化

    2015-9-14

    解决结果:

    通过sql语句的优化来优化,重点分析:

    select dep_id as id ,dep_name as name,super_id as pid,folder from td_department
    start with dep_id in
    (
    select dep_id from td_department
    where valid_flag = 'Y' and comp_id = '46'
    )
    connect by super_id= prior dep_id

     1 public List<TdDepartment> createZtreeDep(String compId) {
     2         
     3         List<TdDepartment> dd = new ArrayList<TdDepartment>();
     4         String sql = "select dep_id,dep_name,super_id,folder from td_department "+
     5                         "start with dep_id in ( "+                        
     6                         "select dep_id  from td_department "+ 
     7                         "where valid_flag = 'Y'  and comp_id = '"+compId+"')connect by super_id=  prior  dep_id";        
     8         System.out.println("sql="+sql);
     9         EpDB db = new EpDB();        
    10         ArrayList<HashMap> departs = db.getHashData(sql);
    11         if(departs == null || departs.size() <= 0)
    12             return null;                
    13         System.out.println("获取到的部门List"+dd);
    14         for(int i=0; i<departs.size(); i++){
    15             String dep_id = departs.get(i).get("DEP_ID").toString();
    16             String dep_name = departs.get(i).get("DEP_NAME").toString();
    17             String super_id = departs.get(i).get("SUPER_ID").toString();            
    18             TdDepartment td = new TdDepartment();
    19             td.setId(dep_id);
    20             td.setPid(super_id);
    21             td.setName(dep_name);
    22             if(departs.get(i).get("FOLDER") != null){
    23                 String folder = departs.get(i).get("FOLDER").toString();
    24                 if("Y".equals(folder)){
    25                     td.setOpen("true");//非叶子结点则需要展开
    26                 }else{
    27                     td.setOpen("false");
    28                 }
    29             }
    30             //取消循环读取
    31             //td.setChild(createDepartments(dep_id));            
    32             dd.add(td);
    33         }
    34         
    35         return dd;
    36     }
  • 相关阅读:
    yii 引入文件
    CodeForces 621C Wet Shark and Flowers
    面试题题解
    POJ 2251 Dungeon Master
    HDU 5935 Car(模拟)
    HDU 5938 Four Operations(暴力枚举)
    CodeForces 722C Destroying Array(并查集)
    HDU 5547 Sudoku(dfs)
    HDU 5583 Kingdom of Black and White(模拟)
    HDU 5512 Pagodas(等差数列)
  • 原文地址:https://www.cnblogs.com/abc8023/p/4794728.html
Copyright © 2011-2022 走看看