oracle 树查询
来源:互联网 发布:苹果mac镜像下载iso 编辑:程序博客网 时间:2024/06/03 17:07
一、基本用法
语法:select…start with…connect by…prior
eg.
1、查出所有子节点
select * from addr a connect by prior a.id=a.parentid start with a.id='3484618'
2、查出所有父节点
select * from addr a connect by prior a.parentid=a.id start with a.id='3484618'
两个语句的 prior位置不同。1表示根据id找出 parentid为id 的记录。2表示根据 parentid 找出 id 为parentid的记录。
二、效率问题
ORACLE递归如果向上递归是没有问题的,因为向上递归都是每次唯一性索引,最多根据层数做不同次数的唯一性索引,这也是很快的。
但是向下递归会比较慢,特别是在数据量大的情况下。因为向下递归是根据当前的节点编号去查找是否有相同的PARENT_ID编号,会找到很多,而且下一轮是将这每一个PARENT_ID再看有没有PARENT_ID有没有,全部存入缓存,肯定会装不下,就开始用临时表空间,就更慢了。
对于递归查询,目前找到的几个优化方法有:
1、创建索引,确保语句中的索引有效。
2、增加一个存储了所有父节点 all_parent_id的字段,直接通过all_parent_id去模糊查询得到子节点;参考资料:http://bbs.csdn.net/topics/340184712
3、如果项目需求允许,可以采用逐级查询的方式。即先查询展示出父节点,再根据父节点查询其下的子节点,而不用一次查询出所有节点。
4、数据很大的话,可以考虑分区表。
5、如果树不经常改动,使用 xml方式存储,而不是存储在数据库中。
6、避免使用connect by的查询,如果无法避免,那么尽可能地减小connect by查询的输入数据集规模,因为connect by查询始终对输入数据集进行全扫描
三、参考资料
http://www.cnblogs.com/linjiqin/archive/2013/06/24/3152674.html
- oracle 递归查询 树查询
- oracle 递归查询 树查询
- ORACLE 树形查询 树查询
- Oracle 递归查询 树查询
- oracle树查询(递归查询)
- oracle SQL树查询
- oracle树查询
- ORACLE - 树结构查询
- oracle树递归查询
- Oracle树结构查询
- oracle 树查询
- ORACLE 树查询
- Oracle树查询
- Oracle树查询
- Oracle 树结构查询
- Oracle树查询
- oracle树查询
- oracle查询父子树
- WMI相关
- C语言入门-第八周:作业01
- 关于Notification的一点愚见(PendingIntent工作流程)
- 基于mybatis的shard方案(分表分库、读写分离)
- day1_初识html
- oracle 树查询
- PHP遍历文件夹下所有文件
- Struts学习总结(八)---使用Struts2实现用户信息的CRUD操作(二:添加操作)
- linux交互式输入自动化 read & expect
- win7下安装myODBC和使用
- 【NOIP提高A组模拟】艾比所特
- 企业用什么留住人才???
- 构造arff格式的文件
- CSS—消除浮动