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语句的优化来优化

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

时间: 2024-08-30 07:48:33

Oracle语句优化之一的相关文章

53个Oracle语句优化规则详解(转)

Oracle sql 性能优化调整  1. 选用适合的ORACLE优化器        ORACLE的优化器共有3种:a. RULE (基于规则)   b. COST (基于成本) c. CHOOSE (选择性)    设置缺省的优化器,可以通过对init.ora文件中OPTIMIZER_MODE参数的各种声明,如RULE,COST,CHOOSE,ALL_ROWS,FIRST_ROWS . 你当然也在SQL句级或是会话(session)级对其进行覆盖.    为了使用基于成本的优化器(CBO,

Oracle语句优化1

Oracle语句优化1 优化就是选择最有效的方法来执行SQL语句.Oracle优化器选择它认为最有效的     方法来执行SQL语句.         1. IS   NULL和IS   NOT   NULL     如果某列存在NULL值,即使对该列建立索引也不会提高性能.     2. 为不同的工作编写不同的SQL语句块.     为完成不同的工作编写一大块SQL程序不是好方法.它往往导致每个任务的结果不优     化.若要SQL完成不同的工作,一般应编写不同的语句块比编写一个要好.    

浅析Oracle语句优化规则

1. 选用适合的ORACLE优化器 ORACLE的优化器共有3种: a. RULE (基于规则) b. COST (基于成本) c. CHOOSE (选择性) 设置缺省的优化器,可以通过对init.ora文件中OPTIMIZER_MODE参数的各种声明,如RULE,COST,CHOOSE,ALL_ROWS,FIRST_ROWS . 你当然也在SQL句级或是会话(session)级对其进行覆盖. 为了使用基于成本的优化器(CBO, Cost-Based Optimizer) , 你必须经常运行an

oracle语句优化

1. /*+ALL_ROWS*/ 表明对语句块选择基于开销的优化方法,并获得最佳吞吐量,使资源消耗最小化. 例如: SELECT /*+ALL+_ROWS*/ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO='CCBZZP'; 2. /*+FIRST_ROWS*/ 表明对语句块选择基于开销的优化方法,并获得最佳响应时间,使资源消耗最小化. 例如: SELECT /*+FIRST_ROWS*/ EMP_NO,EMP_NAM,DAT_IN FROM B

Oracle SQL语句优化34条

非常好用的SQL语句优化34条 1)选择最有效率的表名顺序(只在基于规则的优化器中有效): ORACLE 的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基 础表.如果有3个以上的表连接查询, 那就需要选择交叉表(intersection table)作为基础表, 交叉表是指那个被其他表所引用的表. (2) WHERE子句中的连接顺序.: ORACL

Oracle Sql语句优化

1.最高效的删除重复记录方法 (因为使用了ROWID)   例子:  DELETE FROM  EMP E  WHERE  E.ROWID > (SELECT MIN(X.ROWID) FROM  EMP X  WHERE  X.EMP_NO = E.EMP_NO); 2.在含有子查询的 SQL 语句中 , 要特别注意减少对表的查询   例子:  SELECT TAB_NAME FROM TABLES WHERE (TAB_NAME,DB_VER) = (SELECT TAB_NAME,DB_V

oracle学习 十 数据库的语句优化(持续更)

平时关注Oracle数据库的网友都知道,Oracle性能优化保证了Oracle数据库的健壮性.下面就此提出需要注意的两个原则. 原则一:注意WHERE子句中的连接顺序: ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾. 尤其是“主键ID=?”这样的条件. 原则二: SELECT子句中避免使用 ‘ * ‘: ORACLE在解析的过程中, 会将'*' 依次转换成所有的列名, 这

Oracle大数据SQL语句优化

1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描, 如: select id from t where num is null    可以在num上设置默认值0,确保表中num列没有null值,然后这样查询: select id from t where num=0 3.应尽量避免在 where 子句中使用!=或<>操作符,否则

Oracle语句

Oracle语句-基本查询 --清屏 SQL> host cls --当前用户 SQL> show user USER 为 "SCOTT" --当前用户的表 SQL> select * from tab; --员工表的结构 SQL> desc emp --查询所有的员工信息 SQL> select * from emp; --设置行宽 SQL> show linesize linesize 80 SQL> set linesize  150 -