我們都知道,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是個偽列,代表當前節點所在的層級 對根節點來說,level返回1 根節點到子節點返回2,以此類推。借助level,我們可以控制對錶的掃瞄次數。第一次掃瞄得出的結果集的level都是1,第二次掃瞄的結果集的level都是2,依此類推。實驗環境 sql create table t...
練習,等比數列求和
description 已知q與 n,求等比數列之和 1 q q2 q3 q4 qn input 輸入一對資料,含有乙個整數n 1 n 20 乙個小數 q 0 q 2 output 對於每組資料n和q 計算其等比數列的和,精確到小數點後 5位。sample input 5 1.2 sample ou...
Alternating Sum 等比數列 逆元
給你 n,a,b,k string s n,a,b 1e9 k 1e5 問題是利用上面的引數求乙個式子。其中s i 是有符號位。題目說明了,超過了字串s長度就會取餘進行迴圈。就是 s i k 這個題明顯就是利用迴圈節求解。因為n的值太大,跑不完。所以我們需要找到迴圈節直接的關係。後來通過觀察就知道其...