用等比数列解析伪列level的另一个作用
2012-10-16 21:19
211 查看
我们都知道,level是个伪列,代表当前节点所在的层级;对根节点来说,level返回1;根节点到子节点返回2,以此类推。
借助level,我们可以控制对表的扫描次数。第一次扫描得出的结果集的level都是1,第二次扫描的结果集的level都是2,依此类推。
实验环境:
SQL> create table test as select ename from emp where rownum<=2;
Table created.
SQL> select * from test;
ENAME
----------
SMITH
ALLEN
当level=1时:SQL> select level,ename from test connect by level=1;
LEVEL ENAME
---------- ----------
1 SMITH
1 ALLEN
当level<=2时:SQL> select level,ename from test connect by level<=2;
LEVEL ENAME
---------- ----------
1 SMITH
2 SMITH
2 ALLEN
1 ALLEN
2 SMITH
2 ALLEN
6 rows selected.
当level<=3时:SQL> select level,ename from test connect by level<=3;
LEVEL ENAME
---------- ----------
1 SMITH
2 SMITH
3 SMITH
3 ALLEN
2 ALLEN
3 SMITH
3 ALLEN
1 ALLEN
2 SMITH
3 SMITH
3 ALLEN
LEVEL ENAME
---------- ----------
2 ALLEN
3 SMITH
3 ALLEN
14 rows selected.
当level=1时,进行1次扫描;当level<=2时,第二次进行2次扫描;当level<=3时,第三次进行4次扫描,......,当level<=n时,第n次进行2^(n-1)次方扫描。那么所有的扫描次数总和为: 2^0 + 2^1+ 2^2+...+2^(n-1)
利用等比数列求和公式,可得:
S(n)=2^n - 1
同时,我们还可以对返回行的总数进行计算。
当level=1,扫描1次,返回2行;当level<=2,扫描3次,返回6行;当level<=3时,扫描7次,返回14行;....;当level<=n时,扫描2^n - 1次,返回:
2^1 + 2^2+ 2^3+2^4+...+2^n
利用等比数列求和公式,可得:
T(n)=2^(n+1)-2
得到到返回行的总数,我们可以用(返回行到总数)/(逻辑读)用来大概判断sql语句是否需要优化。
借助level,我们可以控制对表的扫描次数。第一次扫描得出的结果集的level都是1,第二次扫描的结果集的level都是2,依此类推。
实验环境:
SQL> create table test as select ename from emp where rownum<=2;
Table created.
SQL> select * from test;
ENAME
----------
SMITH
ALLEN
当level=1时:SQL> select level,ename from test connect by level=1;
LEVEL ENAME
---------- ----------
1 SMITH
1 ALLEN
当level<=2时:SQL> select level,ename from test connect by level<=2;
LEVEL ENAME
---------- ----------
1 SMITH
2 SMITH
2 ALLEN
1 ALLEN
2 SMITH
2 ALLEN
6 rows selected.
当level<=3时:SQL> select level,ename from test connect by level<=3;
LEVEL ENAME
---------- ----------
1 SMITH
2 SMITH
3 SMITH
3 ALLEN
2 ALLEN
3 SMITH
3 ALLEN
1 ALLEN
2 SMITH
3 SMITH
3 ALLEN
LEVEL ENAME
---------- ----------
2 ALLEN
3 SMITH
3 ALLEN
14 rows selected.
当level=1时,进行1次扫描;当level<=2时,第二次进行2次扫描;当level<=3时,第三次进行4次扫描,......,当level<=n时,第n次进行2^(n-1)次方扫描。那么所有的扫描次数总和为: 2^0 + 2^1+ 2^2+...+2^(n-1)
利用等比数列求和公式,可得:
S(n)=2^n - 1
同时,我们还可以对返回行的总数进行计算。
当level=1,扫描1次,返回2行;当level<=2,扫描3次,返回6行;当level<=3时,扫描7次,返回14行;....;当level<=n时,扫描2^n - 1次,返回:
2^1 + 2^2+ 2^3+2^4+...+2^n
利用等比数列求和公式,可得:
T(n)=2^(n+1)-2
得到到返回行的总数,我们可以用(返回行到总数)/(逻辑读)用来大概判断sql语句是否需要优化。
相关文章推荐
- springMVC ModelAndView 作用与功能解析
- 解析php php_openssl.dll的作用
- Oracle伪列Level的使用
- linux下platform设备驱动框架的实现与作用解析
- 不恰当的EDM邮件营销对B2C网站推广的负面作用解析
- 文件作用解析之:application_top.php
- JS的解析顺序和作用域(严格模式)
- JavaScript 作用域和闭包——另一个角度:扩展你对作用域和闭包的认识【翻译+整理】
- JavaScript 作用域和作用域链 解析
- C++之String的find方法,查找一个字符串在另一个字符串的什么位置;leveldb字符串转数字解析办法
- 深入解析Python中的descriptor描述器的作用及用法
- 深入解析Java中volatile关键字的作用
- spring整合struts2时作用域scope解析
- 面试题解析:1 Java中switch语句可以作用在enum上的测试
- HttpWebRequest解析 作用 介绍
- python的yield作用解析
- JavaScript中this的用法及this在不同应用场景的作用解析
- 深入浅出——网络模型中Inception的作用与结构全解析
- iOS JSON解析 NSJSONReadingMutableContainers的作用:
- 详细解析@Resource和@Autowired的区别 , 以及@Qualifier的作用