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
public List<TdDepartment> createZtreeDep(String compId) { List<TdDepartment> dd = new ArrayList<TdDepartment>();
String sql = "select dep_id,dep_name,super_id,folder from td_department "+
"start with dep_id in ( "+
"select dep_id from td_department "+
"where valid_flag = 'Y' and comp_id = '"+compId+"')connect by super_id= prior dep_id";
System.out.println("sql="+sql);
EpDB db = new EpDB();
ArrayList<HashMap> departs = db.getHashData(sql);
if(departs == null || departs.size() <= 0)
return null;
System.out.println("获取到的部门List"+dd);
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;
}
Oracle语句优化之一的更多相关文章
- 53个Oracle语句优化规则详解(转)
Oracle sql 性能优化调整 1. 选用适合的ORACLE优化器 ORACLE的优化器共有3种:a. RULE (基于规则) b. COST (基于成本) c. CHOOSE ...
- Oracle语句优化1
Oracle语句优化1 优化就是选择最有效的方法来执行SQL语句.Oracle优化器选择它认为最有效的 方法来执行SQL语句. 1. IS NULL和IS NOT ...
- oracle 语句优化
1. 选用适合的ORACLE优化器 ORACLE的优化器共有3种: a. RULE (基于规则) b. COST (基于成本) c. CHOOSE (选择性) 设置缺省的优化器,可 ...
- Oracle语句优化规则(一)
1. 选用适合的ORACLE优化器 ORACLE的优化器共有3种: a. RULE (基于规则) b. COST (基于成本) c. CHOOSE (选择性) 设置缺省的优化 ...
- Oracle语句优化规则(二)
21. 用EXISTS替换DISTINCT 当提交一个包含一对多表信息(比如部门表和雇员表)的查询时,避免在SELECT子句中使用DISTINCT. 一般可以考虑用EXIST替换 例如: ...
- oracle语句优化
摘录来自https://blog.csdn.net/sap_jack/article/details/3766703 1.选用适合的Oracle优化器 Oracle的优化器共有3种: a.RULE(基 ...
- oracle学习 十 数据库的语句优化(持续更)
平时关注Oracle数据库的网友都知道,Oracle性能优化保证了Oracle数据库的健壮性.下面就此提出需要注意的两个原则. 原则一:注意WHERE子句中的连接顺序: ORACLE采用自下而上的 ...
- oracle之sql语句优化
oracle之sql语句优化 sql语句的优化 1.在where子句中使用 is null 或 is not null 时,oracle优化器就不能使用索引了. 2.对于有连接的列,即使最有一个是静态 ...
- Oracle SQL语句优化34条
非常好用的SQL语句优化34条 1)选择最有效率的表名顺序(只在基于规则的优化器中有效): ORACLE 的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 dri ...
随机推荐
- SICP— 第一章 构造过程抽象
SICP Structure And Interpretation Of Computer Programs 中文第2版 分两部分 S 和 I 第一章 构造过程抽象 1,程序设计的基本元素 2,过 ...
- Yii2 事务
$transaction = $connection->beginTransaction(); try { // ... executing other SQL statements ... $ ...
- 好看的CSS按钮
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...
- shell脚本笔记(原创不断记录)
今天开始自己的shell脚本练习,刚好公司有太服务器,要时间对数据的cp是按月的: 考虑:首先寻找规律,发现都放置在/opt/www/aaa/ 里面有很多的2级和3级目录和文件,但我追踪要备份的是年 ...
- C# 添加excel批注
public bool AddComent(object coment, int row, int column) { try { Excel.Range range = myExcel.get_Ra ...
- [转]C++模板学习
1. 模板的概念. 我们已经学过重载(Overloading),对重载函数而言,C++的检查机制能通过函数参数的不同及所属类的不同.正确的调用重载函数.例如,为求两个数的最大值,我们定义MAX()函数 ...
- 新手学JavaScript都要学什么?
要从事网页开发,不知从何下手? 会JavaScript语言但是不知道该如何进阶! 最好的方法就是不断地做网页.写代码,不断地看别人的代码,研究别人的代码! 用代码实践JS的每个技巧点:多听多看多问多写 ...
- C#之LinQ数据库
一:与LINQ有关的语言特性 1.隐式类型 (1)源起 在隐式类型出现之前, 我们在声明一个变量的时候, 总是要为一个变量指定他的类型 甚至在foreach一个集合的时候, 也要为遍历的集合的元素,指 ...
- 《深入浅出WPF》笔记一
1.项目模板 Visual Studio自动配置编译器参数,并准备好一套基本的源代码. 2.App.xaml/App.xaml.cs 声明程序的进程,并指定程序的主窗体. 3.Attribute和Pr ...
- 中国天气预报数据API收集
{"weatherinfo":{"city":"北京","cityid":"101010100" ...